Ⅰ 如何實現網站的防盜鏈
可以基於OSS的防盜鏈,目前OSS提供的防盜鏈的方法主要有兩種:
設置Referer。控制台,SDK都可以操作,適合不想寫代碼的用戶,也適合喜歡開發的用戶;
簽名URL,適合喜歡開發的用戶。 本文會給一個控制台設置Referer防盜鏈的具體事例,也會基於php SDK給一個動態生成簽名URL防盜鏈的示例。
通過Referer防盜鏈的具體步驟
第一步:進入 OSS 管理控制台界面。
第二步:單擊目標存儲空間的名稱進入存儲空間管理頁面。
第三步:單擊 Bucket 屬性 > 防盜鏈設置。
舉例
對於一個名為test-1-001的存儲空間,設置其referer 白名單為 http://www.aliyun.com。則只有 referer 為http://www.aliyun.com的請求才能訪問oss-example這個存儲空間中的對象。
簽名URL實現步驟
簽名URL的原理和實現方法見OSS開發人員指南授權第三方下載。 簽名URL的實現步驟:
1、將Bucket的許可權設置為私有讀;
2、 根據期望的超時時間(簽名URL失效的時間)生成簽名。
具體實現
第一步:安裝PHP最新代碼,參考PHP SDK文檔;
第二步:實現生成簽名URL並將其放在網頁中,作為外鏈使用的簡單示例:
第三步:通過瀏覽器訪問 多請求幾次會發現簽名的URL會變,這是正常的。主要是因為過期時間的改變導致的。這個過期時間是鏈接失效的時間,是以unix time的形式展示的。 如:Expires=189999,可以將這個時間轉換成本地時間。在Linux下的命令為date -d@189999,也可以在網路上找工具自行轉換。
特別說明
簽名URL可以和Referer白名單功能一起使用。
如果簽名URL失效的時間限制在分鍾內,盜鏈用戶即使偽造了Referer也必須拿到簽名的URL,且必須在有效的時間內才能盜鏈成功。 相比只使用Referer來說,增加了盜鏈的難度。 也就是說簽名URL配合Referer白名單功能,可以增加防盜鏈的效果。
防盜鏈總結,基於OSS的防盜鏈最佳實踐點如下:
使用三級域名URL,例如referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png,安全性比綁定二級域名更高。三級域名方式能夠提供Bucket級別的清洗和隔離,能夠應對被盜鏈後的流量暴漲的情況,也能避免不同Bucket間的互相影響,最終提高業務可用性;
如果使用自定義域名作為連接,CNAME也請綁定到三級域名,規則是bucket + endpoint。假如你的bucket名為test,三級域名則為test.oss-cn-hangzhou.aliyuncs.com;
對Bucket設定盡可能嚴格的許可權類別。例如提供公網服務的Bucket設置為public-read或private,禁止設置為public-read-write。Bucket許可權參見訪問控制;
對訪問來源進行驗證,根據需要設置合適的Referer白名單;
如果需要更嚴格的防盜鏈方案,請參考簽名的URL方案;
記錄Bucket訪問日誌,能夠及時發現盜鏈活動和驗證防盜鏈方案的有效性。 訪問日誌參見設置訪問日誌記錄。
Ⅱ 防盜鏈的代碼處理流程
此內容不在自己伺服器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(比如一些音樂、圖片、軟體的下載地址)然後放置在自己的網站中,通過這種方法盜取大網站的空間和流量。
為什麼會產生盜鏈
一般瀏覽有一個重要的現象就是一個完整的頁面並不是一次全部傳送到客戶端的。如果請求的是一個帶有許多圖片和其它信息的頁面,那麼最先的一個Http請求被傳送回來的是這個頁面的文本,然後通過客戶端的瀏覽器對這段文本的解釋執行,發現其中還有圖片,那麼客戶端的瀏覽器會再發送一條Http請求,當這個請求被處理後那麼這個圖片文件會被傳送到客戶端,然後瀏覽器會將圖片安放到頁面的正確位置,就這樣一個完整的頁面也許要經過發送多條Http請求才能夠被完整的顯示。基於這樣的機制,就會產生一個問題,那就是盜鏈問題:就是一個網站中如果沒有起頁面中所說的信息,例如圖片信息,那麼它完全可以將這個圖片的連接到別的網站。這樣沒有任何資源的網站利用了別的網站的資源來展示給瀏覽者,提高了自己的訪問量,而大部分瀏覽者又不會很容易地發現,這樣顯然,對於那個被利用了資源的網站是不公平的。一些不良網站為了不增加成本而擴充自己站點內容,經常盜用其他網站的鏈接。一方面損害了原網站的合法利益,另一方面又加重了伺服器的負擔。
如何實現防盜鏈
要實現防盜鏈,我們就必須先理解盜鏈的實現原理,提到防盜鏈的實現原理就不得不從HTTP協議說起,在HTTP協議中,有一個表頭欄位叫referer,採用URL的格式來表示從哪兒鏈接到當前的網頁或文件。換句話說,通過referer,網站可以檢測目標網頁訪問的來源網頁,如果是資源文件,則可以跟蹤到顯示它的網頁地址。有了referer跟蹤來源就好辦了,這時就可以通過技術手段來進行處理,一旦檢測到來源不是本站即進行阻止或者返回指定的頁面。
如果想對自己的網站進行防盜鏈保護,則需要針對不同的情況進行區別對待。如果網站伺服器用的是apache,那麼使用apache自帶的Url Rewrite功能可以很輕松地防止各種盜鏈,其原理是檢查referer,如果referer的信息來自其他網站則重定向到指定圖片或網頁上。
如果伺服器使用的是IIS的話,則需要通過第三方插件來實現防盜鏈功能了,現在比較常用的一款產品叫做ISAPI_Rewrite,可以實現類似於apache的防盜鏈功能。另外對於論壇來說還可以使用「登錄驗證」的方法進行防盜鏈。
在IE或firefox瀏覽器中,我們可以使用HttpWatch抓包工具抓取網頁的表頭信息,該信息就包含了referer段內容,該內容反映的就是用戶是從哪個地址到達當前頁面的。下面使用PHP語句模擬「限制來路鏈接只能是本網站地址」的防盜鏈技術:
<?phpif(isset($_SERVER['HTTP_REFERER'])){//通過字元串處理函數匹配來路URL是否以本站域名打頭,是,則說明非盜鏈if(strpos($_SERVER['HTTP_REFERER']),'http://www.thanks.live')==0){echo "您是通過本站其他頁面鏈接到該頁面";}else{echo "本站禁止盜鏈";}}esle{echo "您是通過類似直接輸入當前URL的方式進入該頁面的";}?>由於referer值是極易偽造的,所以上述方法只是簡單的防盜鏈。
關於防禦方法,有以下3點:
1、不允許referer為空(不建議,因在某些開啟隱私模式的瀏覽器中,或https頁面引用下,referer是空的)
2、地址變更(lighttpd的是根據有效時間,nginx的根據是md5)
3、登錄校驗(如必須登錄網站帳號後才能訪問)
4.可以借鑒效仿crsf token令牌
二、應對方法
前端腳本
實現代碼:
function showImg( url ) {
var frameid = 'frameimg' + Math.random();
window.img = '<img id="img" src=\''+url+'?'+Math.random()+'\' /><script>window.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>');
}
調用方式:
showImg('圖片地址');
關於防禦方法,有以下3點:
1、不允許referer為空(不建議,因在某些開啟隱私模式的瀏覽器中,或https頁面引用下,referer是空的)
2、地址變更(lighttpd的是根據有效時間,nginx的根據是md5)
3、登錄校驗(如必須登錄網站帳號後才能訪問)
後端代理:
那麼如何才能繞過防盜鏈對所需資源進行抓取???
php實戰
在通常的處理過程中,如果在自己的站點直接引入網路的圖片
這里寫圖片描述
(⊙o⊙)哦,引入鏈接失敗咯啊!!!那麼怎麼用curl處理
畢竟要爬取必要的信息
$url="https://gss0..com/9fo3dSag_xI4khGko9WTAnF6hhy/image/w%3D210/sign=/.jpg";
//$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了,所以結果是這樣的
這里寫圖片描述
python實戰
Flask響應請求有以下幾種方法:
render_template 返回模板文件
jsonify 返回json格式的數據
Response 自定義返回的數據及類型
當服務端需要返回圖片或者各種格式的文件時,就需要使用Response進行自定義返
Ⅲ PHP防盜鏈為什麼要用兩個else
if(isset($_SERVER['HTTP_REFERER'])){
if(strpos($_SERVER['HTTP_REFERER'],"
)==0){
echo"成功";
}else{
header("Location:err.php");
}
}else{
header("Location:err.php");
}
被刪除了,內層的else是對應來源頁必須是以http://localhost開頭的地址,外層的對應的是是否存在來源頁,如果只用外層,就會出現來源頁是其它頁的,只判定內層,如果是直接訪問這一頁的,就會被跳過,這2個判定,1.防止直接訪問本頁,2.防止從非localhost的頁面訪問本頁
Ⅳ 防盜鏈是什麼意思有什麼作用
1、防盜鏈其實就是採用伺服器端編程,通過url過濾技術實現的防止盜鏈的軟體。此內容不在自己伺服器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。
2、作用:可以防止盜竊活動和暴力襲擊。
Ⅳ 網站防盜鏈怎麼解決
盜鏈網站無法下載,報盜鏈的問題。
要下載這類文件最簡單的方法就是改referer。
比方flashget中,網址下面的"引用"一欄中,直接填寫下載地址就可以了。
Ⅵ 怎麼解決網站防盜鏈
防盜鏈原理: http標准協議中有專門的欄位記錄referer一來可以追溯上一個入站地址是什麼二來對於資源文件,可以跟蹤到包含顯示他的網頁地址是什麼。因此所有防盜鏈方法都是基於這個Referer欄位網上比較多的2種一種是使用apache文件FileMatch限制,在httpd.conf中增加 ( 其實也可以將把下面的語句存成一個.htaccess文件),並放到你的網站的根目錄(就是www/html目錄),這樣子別人就沒有辦法盜連你的東東了~~SetEnvIfNoCase Referer "^ http://yahoo.com/" local_ref=1Order Allow,DenyAllow from env=local_refAllow from 127.0.0.1這種很方便禁止非允許訪問URL引用各種資源文件請大家注意,把第一句"^ http://yahoo.com/"改為你的網站,比如我的網站是: http://www.linji.cn我應該這么寫的"^ http://www.linji.cn/"第二種是使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目錄許可權限制在虛擬主機根目錄增加.htaccess文件,描述從定向,把非本地地址refer的圖片文件都從定向到警告圖片或者警告網頁上。首先要確認你的伺服器或空間的伺服器解譯引擎為Apache2,還有支持.htaccess客戶設置文件,如果你有自己的伺服器就請先對./conf/httpd.conf 文件做以下修改找到:#LoadMole rewrite_mole moles/mod_rewrite.so把前面的 # 給去丟找到等一個 AllowOverride None 改為 AllowOverride All重啟Apache2伺服器接下就是做一個 .htaccess 文件了,其 .htaccess 文件內容為RewriteEngine onRewriteCond %{HTTP_REFERER} !^ http://aaoo.net/.*$ [NC]RewriteCond %{HTTP_REFERER} !^ http://aaoo.net$ [NC]RewriteCond %{HTTP_REFERER} !^ http://www.aaoo.net/.*$ [NC]RewriteCond %{HTTP_REFERER} !^ http://www.aaoo.net$ [NC]RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://down.yoyo.com.ru/err.html [R,NC]其中有色的地方都是要改為你的:紅色:就是改為你提供下載頁面的地址,也就是只有通過這個地址才可以下載你所提供的東東。藍色:就是要保護文件的擴展名(以|分開),也就是說以這些為擴展名的文件只有通過紅色的地址才可以訪問。綠色:如果不是通過紅色的地址訪問藍色這些為擴展名的文件時就回重定向到綠色地址上。這個方法有個好處是,不同的虛擬主機用不同的描述定義。接下就是怎麼用 .htaccess 文件來實現防盜鏈了。首先要在空間上建兩個目錄(當然目錄名隨你),一個為 web 另一個為 down ,web 是用來放下載頁面的(或下載程序),down 當然就是放你提供的東東的啦,把 .htaccess 文件的紅色部分改一下,改為http://你的域名/web。藍色部分改為你要保護文件的擴展名。綠色部分改為http://你的域名/web。改後保存.htaccess 文件把它上傳到 down 目錄。還有第三種:我在解決plog禁止盜鏈的時候,發現個問題,也算個好方法。plog把所有資源都自己管理起來,用resserver.php來動態顯示,這樣統一的入口方便添加許可權操作。同時造成上面2種方法無法使用,因為不再是apache直接訪問資源文件,而是php通過文件讀取。因此只能在代碼中做手腳:在讀取資源文件輸出之前,加如下判斷代碼引用$referer = $_SERVER['HTTP_REFERER'];$selfurl = $_SERVER['HTTP_HOST'];if(false == strpos($referer,$selfurl)){echo '非法盜鏈!';exit(1);}這里有些偷懶,直接看引用地址中是否包含host地址,不過原理就是這樣,判斷referer是否是本站地址。我們常常在下載的時候,也碰到盜鏈網站無法下載,報盜鏈的問題。要下載這類文件最簡單的方法就是改referer比方flashget中,網址下面的"引用"一欄中,直接填寫下載地址就可以了。
Ⅶ PHP如何實現防盜鏈詳解
本文實例講述了php簡單防盜鏈實現方法。分享給大家供大家參考。具體如下:
<?php $ADMIN = array( 'defaulturl'=> 'http://blog.qita.in/images/banner-header.gif', //盜鏈返回的地址 'url_1' => 'http://blog.qita.in/file', 'url_2' => 'http://blog.qita.in/file1', ); $okaysites = array( 'http://qita.in', 'http://blog.qita.in', //白名單 'http://blog.qita.in/1.html', ); $reffer = $_SERVER['HTTP_REFERER']; if ($reffer) { $yes = 0; while (list($domain, $subarray) = each($okaysites)) { if (ereg($subarray, "$reffer")) { $yes = 1; } } $theu = 'url_' . $_GET['site']; $file = $_GET['file']; if ($ADMIN[$theu] and $yes == 1) { header("Location: $ADMIN[$theu]/$file"); } else { header("Location: $ADMIN[defaulturl]"); } } else { header("Location: $ADMIN[defaulturl]"); } print_r($_SERVER['HTTP_REFERER']); ?>
Ⅷ 什麼是防盜鏈設置中的空Referer,防盜鏈設置Referer
盜鏈是指服務提供商自己不提供服務的內容,通過技術手段繞過其它有利益的最終用戶界面(如廣告),直接在自己的網站上向最終用戶提供其它服務提供商的服務內容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供很少的資源,而真正的服務提供商卻得不到任何的收益。做好防止盜鏈的工作,是每個網站開發者的重要工作。 做好防盜鏈工作能給網站伺服器減少不少壓力,這里我們分享一種php防盜鏈的實現方法: 一般的下載的步驟:查找->輸出查找結果列表->進入軟體詳細頁面->點擊下載按鈕->打開下載頁面->點擊下載,開始下載 我的方法就是在下載頁面做文章 首先在網站的公共文件里定義一個$key=sdkfjwojf32413這相當於一個密鑰一樣 在下載頁面生成一個隨機數:$certcode = '84615354' (每次打開生成的都不一樣) 然後用以上兩個變數和軟體的ID生成一個md5()加密串 然後生成軟體的真實下載地址:file"); chdir($fileRelPath); $fileRootPath = getcwd() ."/"; $filePath=$HTTP_GET_VARS["file"]; $url=parse_url($_SERVER["HTTP_REFERER"]); if($url[host]!=$_SERVER["HTTP_HOST"] && !in_array($referHost, $excludeReferArr)){ ?> 其實,反盜鏈方式也有不少, 這里只列出一個大概思想作為參考: (1)IIS 反盜鏈, 利用ISAPI_Rewrite,可作為Windows下反盜鏈的一個解決方案; (2) 圖片反盜鏈,在圖片中加入水印,雖然盜鏈者可以達到目的,但是卻也在為自己的網站做宣傳。 以上就是PHP防盜鏈的基本思想和設置方法,希望對大家的學習有所幫助。