HTTP-REFERER這個變量本來是用來驗證你所打開頁面的來源的,防止別的網(wǎng)站盜鏈,不過已經(jīng)越來越不可靠了,完全就是可以偽造出來的。
以下是偽造方法:
ASP:
dim http
set http=server.createobject("MSXML2.XMLHTTP") '//MSXML2.serverXMLHTTP也可以
Http.open "GET",url,false
Http.setRequestHeader "Referer","http://www.05809.cn/"
Http.send()
PHP(前提是裝了curl):
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.05809.cn/xxx.asp");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.05809.cn/");
curl_exec ($ch);
curl_close ($ch);
PHP(不裝curl用sock)
$server = 'www.dc9.cn';
$host = 'www.dc9.cn';
$target = '/xxx.asp';
$referer = 'http://www.dc9.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);
}
VB.NET/C#.NET
Dim oXMLHttp As MSXML2.XMLHTTP30 = New MSXML2.XMLHTTP30()
或者
MSXML2.XMLHTTP30 oXMLHttp = new MSXML2.XMLHTTP30();
oXMLHttp.open(....
oXMLHttp.setRequestHeader(...
oXMLHttp.send(..
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重寫。有的方法能的確達到不錯的效果.
反盜鏈
1、不定期更名文件或者目錄
不定期的更改文件或者目錄的名稱,是最原始的反盜鏈的方式,可以比較有效地防止盜連,這種方法一般工作量比較大。但是批量的文件改名是完全可以自動化的,而且也比較容易實現(xiàn)。在文件的更名過程中, 可能會有客戶正在下載該文件,這樣會導(dǎo)致正常的客戶訪問失敗,盡管這個問題容易解決,但是也不能夠忽視。
2、限制引用頁
這種防盜鏈原理是,服務(wù)器獲取用戶提交信息的網(wǎng)站地址,然后和真正的服務(wù)端的地址相比較,如果一致則表明是站內(nèi)提交,或者為自己信任的站點提交,否則視為盜鏈。實現(xiàn)時可以使用HTTP_REFERER1 和htaccess 文件(需要啟用mod_Rewrite),結(jié)合正則表達式去匹配用戶的每一個訪問請求。對于每一個HTTP 請求, 服務(wù)器都要查找.htaccess 文件,增加了讀取文件的次數(shù),一定程度上降低了性能。另外,服務(wù)器打開這個功能,有比較多的限制。
3、文件偽裝
文件偽裝是目前用得最多的一種反盜鏈技術(shù),一般會結(jié)合服務(wù)器端動態(tài)腳本(PHP/JSP/ASP)。實際上用戶請求的文件地址,只是一個經(jīng)過偽裝的腳本文件,這個腳本文件會對用戶的請求作認(rèn)證,一般會檢查Session,Cookie 或HTTP_REFERER 作為判斷是否為盜鏈的依據(jù)。而真實的文件實際隱藏在用戶不能夠訪問的地方,只有用戶通過驗證以后才會返回給用戶。
4、加密認(rèn)證
這種反盜鏈方式,先從客戶端獲取用戶信息,然后根據(jù)這個信息和用戶請求的文件名字一起加密成字符串(Session ID)作為身份驗證。只有當(dāng)認(rèn)證成功以后,服務(wù)端才會把用戶需要的文件傳送給客戶。一般我們會把加密的Session ID 作為URL 參數(shù)的一部分傳遞給服務(wù)器,由于這個Session ID 和用戶的信息掛鉤,所以別人就算是盜取了鏈接,該Session ID 也無法通過身份認(rèn)證,從而達到反盜鏈的目的。這種方式對于分布式盜鏈非常有效。
5、隨機附加碼
每次,在頁面里生成一個附加碼,并存在數(shù)據(jù)庫里,和對應(yīng)的圖片相關(guān),訪問圖片時和此附加碼對比,相同則輸出圖片,否則輸出404圖片
6、其它方法
其它反盜鏈方式也有不少, 這里只列出一個大概思想作為參考:⑴ IIS 反盜鏈, 利用ISAPI_Rewrite,可作為Windows下反盜鏈的一個解決方案;⑵ 圖片反盜鏈,在圖片中加入水印,雖然盜鏈者可以達到目的,但是卻也在為自己的網(wǎng)站做宣傳。
不過道高一尺,魔高一丈,這些雕蟲小技終歸是有破解方法的。