要防止網站圖片被盜鏈,那么就有必要了解?鏈的手段,基本上可以分為兩種:
第一種:盜鏈者直接使用圖片鏈接引用網站上的圖片。防止這種盜鏈情況的發生有兩種可行的方法:通過Apache服務器進行控制和使用SESSION變量在程序中進行控制。
第二種:直接從網站上下載圖片並且復制使用。
防止圖像盜鏈的方法主要有兩種解決方案,一種使用Apache的mod_rewrite.so擴展,另一種使用PHP的SESSION變量。
1.Apache防盜技術
Apache防盜技術的原理與PHP偽靜態技術的原理是相同的,都需要應用Apache的mod_rewrite.so模組。Apache服務器的配置文件httpd.conf的修改方法如下:
代碼如下 | 復制代碼 |
#LoadModule rewrite_module modules/mod_rewrite.so |
將該項前面的“#”去掉,啟動該項。
查找httpd.conf文件,找到其中的“AllowOverride”項,將它的值修改為All。保存在項目根目錄下創建.htaccess文件,定義防止網圖片被?鏈的方法。.htaccess文件的代碼如下:
SetEnvIfNoCase Referer “^http://192.168.1.2/” local_ref=1
代碼如下 | 復制代碼 |
<FilesMatcvh “.(gif|jpg)”> Allow from env=local_ref </FilesMatch> |
Referer字段:當Apache處理一個請求時,將檢測頭信息中的Referer字段,並且設置環境變量local ref為l,如果請求從本身的網站地址開始,即是本網站的一個頁面。
^http://192.168.1.59/:是一個正則表達式,為了設置環境變量,Referer值必須匹配它。
”NoCase”指令:定義正則表達式的值忽略字符串的大小寫。
Order Allow,Deny:設置Apache對當前的請求,將執行列表中的Allow指令,然后重復進行Deny指令。
local ref:這將使設置了local ref環境變量(無論什么值)的請求通過。任何其他的:請求將被拒絕,因為它們不符合Allow的條件並且默認是拒絕訪問的。
.htaccess
首先是在根目錄下創建一個.htaccess,如果已經有了,直接把下面的代碼復制添加到.htaccess最下端即可。
代碼如下 | 復制代碼 |
#RewriteEngine on RewriteCond %{HTTP_REFERER} !111cn.net [NC] |
簡單的解釋下每條語句的意思:
代碼如下 | 復制代碼 |
RewriteCond %{HTTP_REFERER} !^$ [NC] |
允許空“HTTP_REFERER”的訪問,即允許用戶在瀏覽器地址欄中直接輸入圖片地址時圖片文件的顯示。一般而言,這是可選的,不過,建議這么設置,如果強迫必須具有“HTTP_REFERER”才能訪問,可能會帶來某些問題,比如說在用戶通過代理服務器訪問時。
代碼如下 | 復制代碼 |
RewriteCond %{HTTP_REFERER} !google.com [NC] |
設置允許訪問的HTTP來源,包括我們的站點自身、Google、Baidu、Bloglines、Feedburner等。這個可以添加多條,無憂小編提供的就只有自身還有谷歌百度等常用的seo/seo.html" target="_blank">搜索引擎的訪問權限。
代碼如下 | 復制代碼 |
RewriteRule .*.(gif|jpg|png)$ 111cn.net[R,NC,L] |
定義被盜鏈時替代的鏈接,可以是圖片,也可以是404錯誤頁,無憂小編定義的是首頁,所以就是111cn.net,如果是要定義在404頁面,可以把404頁面的路徑加上。當然替換的頁面文件體積越小越好。你也可以不設置替換圖片,而是使用下面的語句即可:
代碼如下 | 復制代碼 |
RewriteRule .*.(gif|jpg|png)$ – [F] |
這樣客戶們就可以防止網站的流量因為圖片被盜鏈而損失了,這個方法也可以添加上rar,zip之類的文件,只需要在(gif|jpg|png)這里面添加上即可。
例如添加zip文件的防盜鏈:
將這個(gif|jpg|png|zip)替換掉上面完整代碼中的(gif|jpg|png)這段。
SESSION變量防盜鏈
SESSION變量防盜鏈技術的原理是判斷圖片訪問者的權限,如果有權限則可以訪問,否則就不能夠訪問。具體實施就是,首先定義一個SESSION 變量,然后使用另一個腳本生成圖像, 並且在這個腳本中判斷這個SESSION變量是否存在,如果存在則可以訪問圖像。例如,下面:是一個顯示一幅圖像的簡單頁面,圖像的源URL是一個PHP 腳本,確保只有站點的參觀者才i能夠看到圖像。
代碼如下 | 復制代碼 |
<?php |
注意在上面的代碼中登記了一個稱為viewimages的SESSION變量,而<img>標記的src,屬性中顯示的是getimage.php?img=bg3_Ol.jpg。
下面是腳本getimage.php的代碼。首先,檢查SESSION變量viewimage,看其是否被設置為true:
代碼如下 | 復制代碼 |
<?php |
nginx防盜鏈
配置指令location來實現簡單的圖片和其它類型文件的防盜鏈。
Nginx 的配置文件 :
代碼如下 | 復制代碼 |
location ~ .(jpe?g|png|gif)$ { valid_referers none blocked mysite.com *.mysite.com; if ($invalid_referer) { return 403; } } |
用 (“|”) 來分隔你想保護的文件的擴展名。
valid_referers指令包含允許訪問資源的網站列表,不在列表中請求的返回403。下面是valid_referers指令參數的解釋 :
none - 匹配沒有Referer的HTTP請求(Matches the requests with no Referer header).
blocked - 請求有Referer ,但是被防火牆或者代理服務器修改,去掉了https://或http:// (Matches the requests with blocked Referrer header).
*.mydomain.com - 匹配mysite.com的所有二級域名(Matches all the sub domains of mydomain.com. Since v0.5.33, * wildcards can be used in the server names).
除了使用location對文件訪問進行限制,也可以對特定目錄進行限制,下面的配置會禁止訪問images目錄下所有文件
代碼如下 | 復制代碼 |
location /images/ { valid_referers none blocked mysite.com *.mysite.com; if ($invalid_referer) { return 403; } } |
以上配置都是簡單通過驗證請求頭來實現防盜鏈,如果盜鏈的網站通過偽造來路的http請求時不能屏蔽