§§   gagaman部落格

總 覽版 務政 經健康醫療軍 武理 財文 化藝 文科 技台灣的美旅 遊PISA娛 樂鄉 土公 民認 同副 刊哈 啦范氏網
竹縫
視界
耳聾
世界
泰伯
觀點
Joy
隨筆
哈利
天地
Jerry C
鳥 世 界
射水魚
天 空
討海人
鏡 頭
嘻笑
人間
詩情
畫藝
老工仔
思 維
網網
相連
歷史
庫存

主題:透過Apache的.htaccess設置防盜連(anti hotlink)功能
發表:gagaman 2009-03-08 03:44:04 閱覽數:11031 (IP: ) T 2702_R 0 引 用
方法一、

透過Apache的.htaccess放在要禁制檔的根目錄,來設置防盜連功能(anti hotlink),是最方便的。

新的.htaccess設定方式如下:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://your.domain.name/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://your.domain.name$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.your.domain.name/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.your.domain.name$ [NC]
RewriteRule .*.(jpg|gif|png|bmp|rar|zip|exe)$ /content/no_hotlink.jpeg [R,NC]

說明:
到httpd.conf開啟rewrite的模組。

RewriteCond 指定從哪些域名來連線是許可的。
RewriteRule 指定哪些附檔名類型不能被盜連(hotlink),
連著的設定 $ /content/no_hotlink.jpeg [R,NC] 指定連結到某個錯誤訊息頁面,或者是一張圖片。

如果設成$ - [F],則表示盜連的人,會看到403錯誤訊息,顯示禁止存取(403 Forbidden)。

參考資料:http://yblog.org/archive/index.php/6055


方法二、

在 .htaccess 或 httpd.conf 中, 輸入以下敘述:

SetEnvIfNoCase Referer "^http://your.domain.name.tw/" ref=1
SetEnvIfNoCase Referer "^http://123.123.123.xxx/" ref=1

<FilesMatch ".(jpg|gif|png|wma|mrm)$">

Order allow,deny
Allow from env=ref
Allow from 127.0.0.1

</FilesMatch>

方法三、

禁制檔的根目錄設.htaccess檔,寫進下列:

SetEnvIfNoCase Referer "^http://www.your.domain.name.tw/" local_ref=1
SetEnvIfNoCase Referer "^http://your.domain.name.tw/" local_ref=1
SetEnvIfNoCase Referer "^http://自己舊網站連結來的網址/" local_ref=
<FilesMatch ".(txt|doc|gif|jpg|mp3)"> 
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
Allow from 有需要的網址
</FilesMatch>


* FilesMatch ".(txt|doc|gif|jpg|mp3)"禁制檔的副檔名-->txt|doc|gif|jpg|mp3

記錄盜用請求

如果想知道自己網站的藝術品是否被盜,可以嘗試使用同樣的偵測和環境變數來記錄可疑請求。例如,在httpd.conf檔中添加如下命令,那麼會在 /usr/local/web/apache/logs/poachers_log檔中記錄所有具有非法的Referer頭資訊的訪問請求:

代碼:

SetEnvIfNoCase Referer "!^http://my.apache.org/" not_local_ref=1
SetEnvIfNoCase Request_URI ".(gif|jpg)" is_image=1
RewriteEngine On
RewriteCond ${ENV:not_local_ref} =1
RewriteCond ${ENV:is_image} =1
RewriteRule .* - [Last,Env=poach_attempt:1]
CustomLog logs/poachers_log CLF env=poach_attempt


在上面代碼中,頭兩行為條件設置標記(也就是沒有正確的本地Referer的圖片檔),RewriteCond檢測是否該標記被設置,然後RewriteRule設置第三個標記,最後一行使得這樣的訪問請求被記錄在特定的檔中。

重點:httpd.conf 內站台目錄的 AllowOverride 必須為 AllowOverride ALL 這樣, .htaccess 才能夠起作用

1. Options:
表示這個目錄內能夠進行的動作,亦即是權限設定啦!主要的設定值:

2. Indexes:
如果在此目錄下找不到『首頁檔案』時, 就顯示整個目錄下的檔案名稱,『首頁檔案』與 DirectoryIndex 設定值有關。

* FollowSymLinks:
讓在此目錄下的連結檔可以連結出此目錄外。 一般來說被 chroot 的程式將無法離開其目錄,也就是說預設的情況下,你在 /var/www/html 底下的連結檔只要連結到非此目錄的其他地方,則該連結檔預設是失效的。 但使用此設定即可讓連結檔有效的離開本目錄。

* ExecCGI:
讓此目錄具有執行 CGI 程式的權限,非常重要!舉例來說,目前常見的 OpenWebMail 使用了很多的 perl 的程式, 你要讓 openwebmail 可以執行,就得要在 openwebmail 程式所在目錄 擁有 ExecCGI 的權限。注意,不要讓所有目錄均可使用 ExecCGI !

* Includes:
讓一些 Server-Side Include 程式可以運作。建議可以加上去!

* MultiViews:
這玩意兒有點像是多國語言的支持,與語系資料 (LanguagePriority) 有關。最常見在錯誤訊息的回報內容,在同一部主機當中,可以依據用戶端的語系而給予不同的語言顯示呢!預設在錯誤回報訊息當中存在, 你可以檢查一下 /var/www/error/ 目錄下的資料喔!

1. AllowOverride:
表示是否允許額外設定檔 .htaccess 的權限複寫?我們可以在 httpd.conf 內設定好所有的權限,不過如此一來若使用者自己的個人網頁想要修改權限時將會對管理員造成困擾。因此 Apache 預設可以讓使用者以目錄底下的 .htaccess 檔案內複寫 <Directory> 內的權限設定。 這個項目則是在規定 .htaccess 可以複寫的權限類型有哪些。常見的有:

2. ALL:全部的權限均可被複寫;

* AuthConfig:僅有網頁認證 (帳號密碼) 可複寫;
* Indexes:僅允許 Indexes 方面的複寫;
* Limits:允許使用者利用 Allow, Deny 與 Order 管理可瀏覽的權限;
* None:不可複寫,亦即 .htaccess 檔案失效去!

1. Order:
決定是否可被瀏覽的權限設定啦!主要有兩種方式:

2. deny,allow:以 deny 優先處理,但沒有寫入規則的則預設為 allow 喔。

* allow,deny:以 allow 為優先處理,但沒有寫入規則的則預設為 deny 喔。

1. 所以在預設的環境中,因為是 allow,deny 所以預設為 deny (不可瀏覽), 不過在下一行有個 Allow from all ,allow 優先處理,因此全部(all) 用戶端皆可瀏覽啦!這部份我們會在進階安全設定當中再提及低。

參考資料:http://www.xspace.idv.tw/bo_blog/read.php?114


綜 覽 全 部 討 論

總 覽版 務政 經健康醫療軍 武理 財文 化藝 文科 技台灣的美旅 遊PISA娛 樂鄉 土公 民認 同副 刊哈 啦范氏網
竹縫
視界
耳聾
世界
泰伯
觀點
Joy
隨筆
哈利
天地
Jerry C
鳥 世 界
射水魚
天 空
討海人
鏡 頭
嘻笑
人間
詩情
畫藝
老工仔
思 維
網網
相連
歷史
庫存


* 討論區內之言論,不代表本園之立場,一切法律責任仍由發言者本人負責
* 如果您有任何不當言論,本園有權決定是否保留您所送貼的意見 。