此內(nèi)容不在自己服務(wù)器上,而通過技術(shù)手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內(nèi)容。 常常是一些名不見經(jīng)傳的小網(wǎng)站來盜取一些有實力的大網(wǎng)站的地址(比如一些音樂、圖片、軟件的下載地址)然后放置在自己的網(wǎng)站中,通過這種方法盜取大網(wǎng)站的空間和流量。
創(chuàng)新互聯(lián)成立十多年來,這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供成都網(wǎng)站設(shè)計、網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、空間域名、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。網(wǎng)站是否美觀、功能強大、用戶體驗好、性價比高、打開快等等,這些對于網(wǎng)站建設(shè)都非常重要,創(chuàng)新互聯(lián)通過對建站技術(shù)性的掌握、對創(chuàng)意設(shè)計的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
為什么會產(chǎn)生盜鏈
一般瀏覽有一個重要的現(xiàn)象就是一個完整的頁面并不是一次全部傳送到客戶端的。如果請求的是一個帶有許多圖片和其它信息的頁面,那么最先的一個Http請求被傳送回來的是這個頁面的文本,然后通過客戶端的瀏覽器對這段文本的解釋執(zhí)行,發(fā)現(xiàn)其中還有圖片,那么客戶端的瀏覽器會再發(fā)送一條Http請求,當(dāng)這個請求被處理后那么這個圖片文件會被傳送到客戶端,然后瀏覽器會將圖片安放到頁面的正確位置,就這樣一個完整的頁面也許要經(jīng)過發(fā)送多條Http請求才能夠被完整的顯示。基于這樣的機(jī)制,就會產(chǎn)生一個問題,那就是盜鏈問題:就是一個網(wǎng)站中如果沒有起頁面中所說的信息,例如圖片信息,那么它完全可以將這個圖片的連接到別的網(wǎng)站。這樣沒有任何資源的網(wǎng)站利用了別的網(wǎng)站的資源來展示給瀏覽者,提高了自己的訪問量,而大部分瀏覽者又不會很容易地發(fā)現(xiàn),這樣顯然,對于那個被利用了資源的網(wǎng)站是不公平的。一些不良網(wǎng)站為了不增加成本而擴(kuò)充自己站點內(nèi)容,經(jīng)常盜用其他網(wǎng)站的鏈接。一方面損害了原網(wǎng)站的合法利益,另一方面又加重了服務(wù)器的負(fù)擔(dān)。
如何實現(xiàn)防盜鏈
要實現(xiàn)防盜鏈,我們就必須先理解盜鏈的實現(xiàn)原理,提到防盜鏈的實現(xiàn)原理就不得不從HTTP協(xié)議說起,在HTTP協(xié)議中,有一個表頭字段叫referer,采用URL的格式來表示從哪兒鏈接到當(dāng)前的網(wǎng)頁或文件。換句話說,通過referer,網(wǎng)站可以檢測目標(biāo)網(wǎng)頁訪問的來源網(wǎng)頁,如果是資源文件,則可以跟蹤到顯示它的網(wǎng)頁地址。有了referer跟蹤來源就好辦了,這時就可以通過技術(shù)手段來進(jìn)行處理,一旦檢測到來源不是本站即進(jìn)行阻止或者返回指定的頁面。
如果想對自己的網(wǎng)站進(jìn)行防盜鏈保護(hù),則需要針對不同的情況進(jìn)行區(qū)別對待。如果網(wǎng)站服務(wù)器用的是apache,那么使用apache自帶的Url Rewrite功能可以很輕松地防止各種盜鏈,其原理是檢查referer,如果referer的信息來自其他網(wǎng)站則重定向到指定圖片或網(wǎng)頁上。
如果服務(wù)器使用的是IIS的話,則需要通過第三方插件來實現(xiàn)防盜鏈功能了,現(xiàn)在比較常用的一款產(chǎn)品叫做ISAPI_Rewrite,可以實現(xiàn)類似于apache的防盜鏈功能。另外對于論壇來說還可以使用“登錄驗證”的方法進(jìn)行防盜鏈。
在IE或firefox瀏覽器中,我們可以使用HttpWatch抓包工具抓取網(wǎng)頁的表頭信息,該信息就包含了referer段內(nèi)容,該內(nèi)容反映的就是用戶是從哪個地址到達(dá)當(dāng)前頁面的。下面使用PHP語句模擬“限制來路鏈接只能是本網(wǎng)站地址”的防盜鏈技術(shù):
?phpif(isset($_SERVER['HTTP_REFERER'])){//通過字符串處理函數(shù)匹配來路URL是否以本站域名打頭,是,則說明非盜鏈if(strpos($_SERVER['HTTP_REFERER']),'')==0){echo "您是通過本站其他頁面鏈接到該頁面";}else{echo "本站禁止盜鏈";}}esle{echo "您是通過類似直接輸入當(dāng)前URL的方式進(jìn)入該頁面的";}?由于referer值是極易偽造的,所以上述方法只是簡單的防盜鏈。
關(guān)于防御方法,有以下3點:
1、不允許referer為空(不建議,因在某些開啟隱私模式的瀏覽器中,或https頁面引用下,referer是空的)
2、地址變更(lighttpd的是根據(jù)有效時間,nginx的根據(jù)是md5)
3、登錄校驗(如必須登錄網(wǎng)站帳號后才能訪問)
4.可以借鑒效仿crsf token令牌
二、應(yīng)對方法
前端腳本
實現(xiàn)代碼:
function showImg( url ) {
var frameid = 'frameimg' + Math.random();
window.img = 'img id="img" src=\''+url+'?'+Math.random()+'\' /scriptwindow.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }'+'/script';
document.write('iframe id="'+frameid+'" src="javascript:parent.img;" frameBorder="0" scrolling="no" width="100%"/iframe');
}
調(diào)用方式:
showImg('圖片地址');
關(guān)于防御方法,有以下3點:
1、不允許referer為空(不建議,因在某些開啟隱私模式的瀏覽器中,或https頁面引用下,referer是空的)
2、地址變更(lighttpd的是根據(jù)有效時間,nginx的根據(jù)是md5)
3、登錄校驗(如必須登錄網(wǎng)站帳號后才能訪問)
后端代理:
那么如何才能繞過防盜鏈對所需資源進(jìn)行抓?????
php實戰(zhàn)
在通常的處理過程中,如果在自己的站點直接引入百度的圖片
這里寫圖片描述
(⊙o⊙)哦,引入鏈接失敗咯?。。。∧敲丛趺从胏url處理
畢竟要爬取必要的信息
$url="";
//$url = str_replace("http:/","http://",$url);
$dir = pathinfo($url);
$host = $dir['dirname'];
$refer = $host.'/';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
header("Content-type: image/jpeg");
print( $data );
然后么,因為直接print了,所以結(jié)果是這樣的
這里寫圖片描述
python實戰(zhàn)
Flask響應(yīng)請求有以下幾種方法:
render_template 返回模板文件
jsonify 返回json格式的數(shù)據(jù)
Response 自定義返回的數(shù)據(jù)及類型
當(dāng)服務(wù)端需要返回圖片或者各種格式的文件時,就需要使用Response進(jìn)行自定義返
法一:
js的文件名,動態(tài)生成,換句話說:你的js文件名,每次初加載時是不一樣,這樣客戶機(jī)(其他)電腦就不能直接引用。而具體的文件名,你可寫個算法,比如,根據(jù)時間來動態(tài)加權(quán),方法很多;
法二:
對js文件加密,方法也很多,這樣其他人得到的加密后的亂碼文件。
法三:
對js文件路徑加密。
動態(tài)網(wǎng)站不是都有過濾器嗎? 用 過濾器 如果后綴檢測到是 js 就轉(zhuǎn)頁面就可以了script src="123.asp"/script123.asp 就是你得js文件判斷request 里面獲得的 IE瀏覽器 里面的路徑如果 最后是 123.asp 就過濾掉!!跳轉(zhuǎn) 錯誤頁面!同時 還要 在session 里面加一個值 判斷 不然 用框架啊 也可以 include 你的頁面進(jìn)來 所以 方法 是1:判斷路徑 2:同時 判斷session 里面 是否有值這樣 就能做到不可下載 也就是 asp的過濾 不知道 明白了不??補充: 這能說明你js 的格式不正確 或者 調(diào)用路徑不對 或者 里面的代碼有錯誤
//防盜一般只是判斷referer是不是自己網(wǎng)站,如果referer為空也會顯示圖片,所以有了下面的代碼。
meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/?
script?type="text/javascript"?
function?showImg(?url?)?{?
var?frameid?=?'frameimg'?+?Math.random();?
window.img?=?'img?id="img"?src=\''+url+'?'+Math.random()+'\'?/scriptwindow.onload?=?function()?{?parent.document.getElementById(\''+frameid+'\').height?=?document.getElementById(\'img\').height+\'px\';?}'+'/script';?
document.write('iframe?id="'+frameid+'"?src="javascript:parent.img;"?frameBorder="0"?scrolling="no"?width="100%"/iframe');?
}?
/script?
h1直接盜鏈:/h1br?
img?src=""?/br?
h1js破解盜鏈:/h1br?
div?id="hotlinking"script?type="text/javascript"showImg('');/script/divbr
兼容性:已測試IE6、IE7、IE8、chrome 7、FF3.6、Opera10.63?
防御方法:?
1、不允許referer為空(不建議,因在某些開啟隱私模式的瀏覽器中,或https頁面引用下,referer是空的);?
2、地址變更(lighttpd的是根據(jù)有效時間,nginx的根據(jù)是md5);?
3、登錄校驗(如必須登錄網(wǎng)站帳號后才能訪問);
函數(shù)如下:
function?showImg(?url?)?{?
var?imgid?=?Math.random(),?
frameid?=?'frameimg'?+?imgid;?
window['img'+imgid]?=?'img?id="img"?src=\''+url+'?kilobug\'?/scriptwindow.onload?=?function()?{?parent.document.getElementById(\''+frameid+'\').height?=?document.getElementById(\'img\').height+\'px\';?}'+'/script';?
document.write('iframe?id="'+frameid+'"?src="javascript:parent[\'img'+imgid+'\'];"?frameBorder="0"?scrolling="no"?width="100%"/iframe');?
}