防賊妙招!如何防止圖片被小偷盜連?

這兩天把 AWSTATS 給裝起來了,順道把 Apache Access Log 格式改成 Combined 格式,一併將 Referer 與瀏覽器/OS的類型一併記錄在Access Log 中。
開始紀錄了以後才發現,原來有人盜連我文章上的圖片。

220.132.143.85 – – [30/Jul/2007:00:02:46 +0800] “GET /blojsom/resources/default/20050911_azureus/step3.JPG HTTP/1.1” 403 357 “http://www.btpig.com/html/200702/649999.html” “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5”

按照 Referer 的網址連過去,果然又是大陸的網站。難怪先前沒事在看 Access Log 時,常常看到怎麼會只有圖片而沒有文章的的點擊紀錄。這下子得來想想怎麼防這些小偷。

股溝大神真是我的好朋友,有什麼問題問他,包準給你一個滿意的答覆。查了一下怎麼擋盜連圖片,大抵上都是說要透過 HTTP Header 上的 Referer 來達到阻擋的效果。

所謂 Referer 是指,瀏覽器在進行 HTTP Request 時,會自動將上一個 URL 放在 Referer 中。於是乎,如果是正常連結過來圖片,Referer 必然是從 broso.twbbs.org 所連結過來的。所以只要 Referer 不是 broso.twbbs.org,那就不用客氣了,殺無赦!!

於是調整了一下我的 Apache httpd.conf,增加參數如下:

1
2
3
4
5
6
7

# 防止人家盜連圖片, 擋 gif, jpg,png
SetEnvIfNoCase Referer "^http://broso\.twbbs\.org/" local_ref=1
<FilesMatch "\.([Gg][Ii][Ff]|[Jj][Pp][Gg]|[Pp][Nn][Gg] )$">
  Order deny,allow
  Deny from all
  Allow from env=local_ref
</FilesMatch>

稍微解釋一下

SetEnvIfNoCase 這一行,指的是任何 Referer 開頭是 http://broso.twbbs.org/ 都設定環境變數 local_ref 為 1
接著用 FilesMatch Tag,針對任何 gif/jpg/png 結尾的檔案進行檢查,有設定環境變數 local_ref 的要求才允許讀取

改完後,重起以後就可以了…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料