怎么防止網站圖片被盜鏈?


要防止網站圖片被盜鏈,那么就有必要了解?鏈的手段,基本上可以分為兩種:

第一種:盜鏈者直接使用圖片鏈接引用網站上的圖片。防止這種盜鏈情況的發生有兩種可行的方法:通過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)”>
Order Allow,Deny

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} !^$ [NC]
  RewriteCond %{HTTP_REFERER} !google.com [NC]
  RewriteCond %{HTTP_REFERER} !baidu.com [NC]

RewriteCond %{HTTP_REFERER} !111cn.net [NC]
  RewriteRule .*.(gif|jpg|png)$ 111cn.net[R,NC,L]


簡單的解釋下每條語句的意思:

 

 代碼如下 復制代碼
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
session_start();
$_SESSION['viewimages']=true;
?>
<img src=”getimage.php?img=bg3_01.jpg”>

注意在上面的代碼中登記了一個稱為viewimages的SESSION變量,而<img>標記的src,屬性中顯示的是getimage.php?img=bg3_Ol.jpg。
下面是腳本getimage.php的代碼。首先,檢查SESSION變量viewimage,看其是否被設置為true:

 代碼如下 復制代碼

<?php
session_start();
if(isset($_SESSION['VIEWIMAGES']) && $_SESSION['viewimage']==true){
$dims = getimagesize(‘images/’.$_GET['IMG']);
header(‘Content-Disposition:inline;filename=’.$_GET['img']);
header(‘Content-Type:’.$dims['mime']);
header(‘Content-Length:’.filesize(‘images/’.$_GET['img']));
readfile(‘images/’.$_GET['img']);
}else{
header(‘HTTP/1.1 404 NOT Found’);
header(‘Content-Type:text/plain’);
echo “ WWW.111cn.Net這是一個被保護的圖片不可盜鏈! n”;
}
?>

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請求時不能屏蔽

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM