這篇文章主要介紹“如何使用php偽造referer的方法防止圖片盜鏈”,在日常操作中,相信很多人在如何使用php偽造referer的方法防止圖片盜鏈問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用php偽造referer的方法防止圖片盜鏈”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比青島網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式青島網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋青島地區(qū)。費用合理售后完善,十載實體公司更值得信賴。什么是HTTP Referer
簡言之,HTTP Referer是header的一部分,當瀏覽器向web服務(wù)器發(fā)送請求的時候,一般會帶上Referer,告訴服務(wù)器我是從哪個頁面鏈接過來的,服務(wù)器籍此可以獲得一些信息用于處理。比如從我主頁上鏈接到一個朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計出每天有多少用戶點擊我主頁上的鏈接訪問他的網(wǎng)站。
Referer其實應(yīng)該是英文單詞Referrer,不過拼錯的人太多了,所以編寫標準的人也就將錯就錯了。
我的問題
我剛剛把feed閱讀器改變?yōu)镚regarius,但他不像我以前用的liferea,訪問新浪博客的時候,無法顯示其中的圖片,提示“此圖片僅限于新浪博客用戶交流與溝通”,我知道,這就是HTTP Referer導致的。
由于我上網(wǎng)客戶端配置的特殊性,首先懷疑是squid的問題,但通過實驗排除了,不過同時發(fā)現(xiàn)了一個Squid和Tor、Privoxy協(xié)同使用的隱私泄露問題,留待以后研究。
Gregarius能處理這個問題么?
答案是否定的,因為Gregarius只是負責輸出html代碼,而對圖像的訪問是有客戶端瀏覽器向服務(wù)器請求的。
不過,安裝個firefox擴展也許能解決問題,文中推薦的”Send Referrer”我沒有找到,但發(fā)現(xiàn)另外一個可用的:”RefControl“,可以根據(jù)訪問網(wǎng)站的不同,控制使用不同的Referer。
但是我不喜歡用Firefox擴展來解決問題,因為我覺得他效率太低,所以我用更好的方式——Privoxy。
Privoxy真棒
在Privoxy的default.action中添加兩行:
{+hide-referrer{forge}}
.album.sina.com.cn
這樣Gregarius中新浪博客的圖片就出來了吧?+hide-referrer是Privoxy的一個過濾器,設(shè)置訪問時對HTTP Referer的處理方式,后面的forge代表用訪問地址當作Refere的,還可以換成block,代表取消Referer,或者直接把需要用的Referer網(wǎng)址寫在這里。
用Privoxy比用Firefox簡單的多,趕緊換吧。
From https to http
我還發(fā)現(xiàn),從一個https頁面上的鏈接訪問到一個非加密的http頁面的時候,在http頁面上是檢查不到HTTP Referer的,比如當我點擊自己的https頁面下面的w3c xhtml驗證圖標(網(wǎng)址為http://validator.w3.org/check?uri=referer),從來都無法完成校驗,提示:
No Referer header found!
原來,在http協(xié)議的rfc文檔中有定義:
復(fù)制代碼 代碼如下:
15.1.3 Encoding Sensitive Information in URI's
Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol.
這樣是出于安全的考慮,訪問非加密頁時,如果來源是加密頁,客戶端不發(fā)送Referer,IE一直都是這樣實現(xiàn)的,F(xiàn)irefox瀏覽器也不例外。但這并不影響從加密頁到加密頁的訪問。
Firefox中關(guān)于Referer的設(shè)置
都在里,有兩個鍵值:
network.http.sendRefererHeader (default=2) 設(shè)置Referer的發(fā)送方式,0為完全不發(fā)送,1為只在點擊鏈接時發(fā)送,在訪問頁面中的圖像什么的時候不發(fā)送,2為始終發(fā)送。參見Privacy Tip #3: Block Referer Headers in Firefox
network.http.sendSecureXSiteReferrer (default=true) 設(shè)置從一個加密頁訪問到另外一個加密頁的時候是否發(fā)送Referer,true為發(fā)送,false為不發(fā)送。
利用Referer防止圖片盜鏈
雖然Referer并不可靠,但用來防止圖片盜鏈還是足夠的,畢竟不是每個人都會修改客戶端的配置。實現(xiàn)一般都是通過apache的配置文件,首先設(shè)置允許訪問的地址,標記下來:
# 只允許來自don.com的訪問,圖片可能就放置在don.com網(wǎng)站的頁面上
SetEnvIfNoCase Referer "^http://www.don.com/" local_ref
# 直接通過地址訪問
SetEnvIf Referer "^$" local_ref
然后再規(guī)定被標記了的訪問才被允許:
復(fù)制代碼 代碼如下:
<FilesMatch ".(gif|jpg)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
或者
復(fù)制代碼 代碼如下:
<Directory /web/images>
Order Deny,Allow
Deny from all
Allow from env=local_ref
</Directory>
不要使用Rerferer的地方
不要把Rerferer用在身份驗證或者其他非常重要的檢查上,因為Rerferer非常容易在客戶端被改變,不管是通過上面介紹的Firefox擴展,或者是Privoxy,甚至是libcurl的調(diào)用,所以Rerferer數(shù)據(jù)非常之不可信。
如果你想限制用戶必須從某個入口頁面訪問的話,與其使用Referer,不如使用session,在入口頁面寫入session,然后在其他頁面檢查,如果用戶沒有訪問過入口頁面,那么對應(yīng)的session就不存在,參見這里的討論。不過和上面說的一樣,也不要過于相信這種方式的“驗證”結(jié)果。
個人感覺現(xiàn)在Rerferer除了用在防盜鏈,其他用途最多的就是訪問統(tǒng)計,比如統(tǒng)計用戶都是從哪里的鏈接訪問過來的等等。
HTTP-REFERER這個變量已經(jīng)越來越不可靠了,完全就是可以偽造出來的東東。
以下是偽造方法:
PHP(前提是裝了curl):
復(fù)制代碼 代碼如下:
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.d.cn/xxx.asp");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.d.cn/");
curl_exec ($ch);
curl_close ($ch);
PHP(不裝curl用sock)
$server = 'www.dc9.cn';
$host = 'www.dc9.cn';
$target = '/xxx.asp';
$referer = 'http://www.d.cn/'; // Referer
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$out = "GET $target HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Cookie: ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEG\r\n";
$out .= "Referer: $referer\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
echo fgets($fp, 128);
}
fclose($fp);
}
javascript
xmlHttp.setRequestHeader("Referer", "http://URL");// 呵呵~假的~
JS不支持^_^
原理都是sock構(gòu)造http頭來senddata。其他語言什么的比如perl也可以,
目前比較簡單的防御偽造referer的方法是用驗證碼(Session)。
現(xiàn)在有一些能防盜鏈軟件的商業(yè)公司比如UUDOG,linkgate,VirtualWall什么的,都是開發(fā)的應(yīng)用于IIS上面的dll。
有的是采用cookies驗證、線程控制,有的是能隨機生成文件名然后做URL重寫。有的方法能的確達到不錯的效果.
不過道高一尺,魔高一丈,這些雕蟲小技終歸是有破解方法的。
一般的就是這樣的了,但是服務(wù)器就不好實現(xiàn)偽造,只能制造不多的數(shù)據(jù)了,如果可以實現(xiàn)訪問網(wǎng)頁就可以偽造,那就可以實現(xiàn)了真正的偽造,實現(xiàn)自然IP分布。
到此,關(guān)于“如何使用php偽造referer的方法防止圖片盜鏈”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站欄目:如何使用php偽造referer的方法防止圖片盜鏈-創(chuàng)新互聯(lián)
當前鏈接:http://jinyejixie.com/article14/pisde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、標簽優(yōu)化、小程序開發(fā)、網(wǎng)站制作、企業(yè)建站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容