上傳一個檔案便可防止全站圖片被盜連:.htaccess
ally 2004.02.25
前言
要防止網站圖片被盜連 (hot-linking),有個很簡單的方法,這方法是運用一個名為「.htaccess」的檔案。沒錯,「.htaccess」已是完整的檔名,那一點前面什麼東西都沒有。只要上傳這一個檔案到空間的根目錄,不用修改任何現有檔案,就可以防止全站的圖片被盜連。
有一點觀念要釐清的是,這個檔名並非表示副檔名是 htaccess,正確的說法應該是這個檔案檔名就是 htaccess,沒有副檔名,然後在前面加一點是為了讓檔案屬性變為隱藏檔。所以那一點並非主檔名跟副檔名中間的那一點,不過是看起來以為是這樣罷了。
.htaccess 方法據說只適用Unix家族跟Apache建立起來的伺服器主機。不過,大部分網頁空間都符合條件吧。
建立檔案
用記事本建立一個純文字檔,檔名取為 temp.htaccess。前面temp那個名字隨你取啦,要先這樣做是因為Windows不允許那一點前面什麼都沒有,所以就先隨便給個名字,等上傳至空間主機後再把它砍掉。
編寫檔案
首先,取消記事本的「自動換行功能」,就是不使用,不勾選。這點很重要!
再來,寫入下四行語法即可:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?illusionland.net/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
那個網址就表示這才是合法入口,這網址底下的所有圖片只能在這網址底下的頁面中呈現,如果別的網址的網頁直接連接這裡的圖片便無法呈現。
要注意填寫網址那裡關於 www 那個特殊之處,這寫法是為了讓語法能對 http://illusionland.net/ 、 http://www.illusionland.net/ 兩種網址都生效。所以請看清楚該如何置換成您自己的網站首頁位址。
這範例只防堵gif、jpg兩種格式,您可以依法填入更多格式,甚至影音檔或其它格式亦可,如下例:
RewriteRule \.(gif|jpg|png|mp3|wma|asf|htm|html)$ - [F]
上傳檔案
用FTP軟體上傳,上傳到空間的根目錄,用ASCII模式上傳。然後更改屬性為644。
改回正確檔名
上述步驟都完成後,最後是要將檔名改回「.htaccess」。但是要特別注意一點,一旦檔名改為「.htaccess」,這就是個隱藏檔,在FTP內就看不到,也就是改完檔名後就消失了。此後只有登入空間的 control panel,用它的線上 file manager 才能看到「.htaccess」這個檔案。
而改完檔名,只要一切步驟都正確,空間伺服器類型也符合條件,防止圖片盜連的功能就已經啟動,可正常運作了。
錯誤補救方式
如果步驟有錯,或是空間伺服器條件無法配合的話,.htaccess 檔不但無法運作,而且還可能造成嚴重問題,就是整個網站可能會無法開啟。
但說是嚴重問題,其實也只是小問題。正如前言就提到了,這方法只有上傳一個 .htaccess 檔,根本沒有修改任何原有檔案。所以如果方法行不通,再把 .htaccess 檔砍掉就可恢復原狀了。
可是如上一步驟所提的,這時在FTP軟體內已經看不到 .htaccess 了,要登入空間的 control panel 才能砍掉 .htaccess。
何謂防盜連
最後介紹一下基本概念:何謂防盜連 (hot-linking)?這防堵語法到底是防堵了什麼現象?
直接舉例說明吧。例如某人看出我網站某圖片的網址,直接拿回他自己網站,用 的語法將我的圖片直接放在他的頁面裡,成為網頁元素的一部份,這種情況 .htaccess 語法便可發揮作用,他的頁面上將無法呈現這張圖片,只會是個叉叉。
位址沒錯,圖片確實擺在那裡,但別人拿去放在他頁面裡的話圖片就無法呈現,這就是防圖片盜連。
但是,別人如果把位址直接輸入在IE的位址列,圖片還是會呈現出來。或是用Flashget等軟體來下載圖片,也可以把圖片取走。
再舉例影音檔。例如某人看出我網站某影音檔的網址,直接拿回他自己網站貼在頁面上產生連結,如這樣 http://illusionland.net/test.wma,那麼 .htaccess 能產生的防盜效果是:
1. 左鍵直接點選該連結,無法播放。
2. 右鍵另存新檔,可以把檔案存走。
3. 用Flashget等軟體,可以把檔案存走。
4. 複製網址再填入IE的位址列,可以開啟播放檔案。
5. 將該網址用embed語法或各式播放器播放,可以順利播放出來。
歸納來說,不管是圖片或影音檔,那些防不住的情況其實並不叫盜連,而根本是下載檔案。我個人是覺得 .htaccess 在防止圖片盜連方面,能防止圖片直接出現在別人的頁面就很夠用了,誰會無聊到一直把你的圖片網址直接輸入在IE的網址列呢?但若用 .htaccess 防止影音檔盜連就有一點點無謂,因為效果不彰,人家若要拿你的影音檔一定就是把檔案下載走,或是把位址拿去給embed語法、播放器使用,這都是 .htaccess 防不住的。
ally 2004.02.25

請問這跟control panel裡面的防盜連有什麼不同嗎?
我家有這個選項,打勾後好像也是來防圖片被盜用的??
control panel 有的話就不需這個了,應該是一樣功能。
我家的主機沒有contro panel的管理介面呢
那就不能亂試囉^^
是啊,有相當風險。怎麼會沒有control panel?真奇怪。
是啊
幾乎沒有管理介面可言
只有一些基本的網站資訊帳號密碼郵件
連mysql介面都是另外一個網址連結的
對了!ally你要不要介紹一下防右鍵?
這裡的好像防的很厲害喔。真想學習一下。
我哪邊都是文字資料。這個功能比較重要。
艾莉知道怎麼用.htaccess做到除首頁以外在網址列輸入其他網址均被轉去403了嗎
sue家有貼一個
http://www.edobi.com/call.cgi?target=doc_htaccess
看不懂哪> < 我家有control panel所以可以設定圖片影音的防盜了 但是有問主機商可否做到首頁連結外的網址均被轉去403 他給了我一堆英文網頁叫我自己去.htaccess設定> <
不知道。sue 貼的那個應該沒有這方面的說明,那個redirect跟妳想要的情況似乎不盡相同。
不過Jim有用PHP寫了一個語法可以辦到,如果在網址列內直接輸入某個內部頁面,還是會被踢回首頁去。妳去他那邊看看,有篇「Jim 如果做到像你網站這樣防盜......」
係咪一定要用ftp上傳+改屬性?
如果個個空間不能用ftp上傳
豈不是用不到???
不盡然啦。主要是有兩個關鍵之處:
1. 要使用ASCII模式上傳
2. 要更改檔案屬性
一般FTP軟體都有這兩種功能,所以優先建議使用FTP上傳。
有些空間沒有FTP,只能web-upload,上傳檔案當然沒問題,但不見得可以選擇上傳模式及更改檔案屬性,如果那空間有這兩種功能,那麼用web- upload也可以。我的空間即使只使用web-upload也有這兩個功能,只要是付費空間應該多半都可以,免費空間就比較少有支援這兩個功能的。