Ⅰ 防盜鏈的代碼處理流程
此內容不在自己伺服器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(比如一些音樂、圖片、軟體的下載地址)然後放置在自己的網站中,通過這種方法盜取大網站的空間和流量。
為什麼會產生盜鏈
一般瀏覽有一個重要的現象就是一個完整的頁面並不是一次全部傳送到客戶端的。如果請求的是一個帶有許多圖片和其它信息的頁面,那麼最先的一個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進行自定義返
Ⅱ 怎麼解決網站防盜鏈
防盜鏈原理: 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 高並發解決思路解決方案,如何應對網站大流量高並發情況。本文為大家總結了常用的處理方式,但不是細節,後續一系列細節教程給出。希望大家喜歡。
一 高並發的概念
在互聯網時代,並發,高並發通常是指並發訪問。也就是在某個時間點,有多少個訪問同時到來。
二 高並發架構相關概念
1、QPS (每秒查詢率) : 每秒鍾請求或者查詢的數量,在互聯網領域,指每秒響應請求數(指 HTTP 請求)
2、PV(Page View):綜合瀏覽量,即頁面瀏覽量或者點擊量,一個訪客在 24 小時內訪問的頁面數量
--註:同一個人瀏覽你的網站的同一頁面,只記做一次 pv
3、吞吐量(fetches/sec) :單位時間內處理的請求數量 (通常由 QPS 和並發數決定)
4、響應時間:從請求發出到收到響應花費的時間
5、獨立訪客(UV):一定時間范圍內,相同訪客多次訪問網站,只計算為 1 個獨立訪客
6、帶寬:計算帶寬需關注兩個指標,峰值流量和頁面的平均大小
7、日網站帶寬: PV/統計時間(換算到秒) * 平均頁面大小(kb)* 8
三 需要注意點:
1、QPS 不等於並發連接數(QPS 是每秒 HTTP 請求數量,並發連接數是系統同時處理的請求數量)
2、峰值每秒請求數(QPS)= (總 PV 數*80%)/ (六小時秒數*20%)【代表 80%的訪問量都集中在 20%的時間內】
3、壓力測試: 測試能承受的最大並發數 以及測試最大承受的 QPS 值
4、常用的性能測試工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】
四 優化
1、當 QPS 小於 50 時
優化方案:為一般小型網站,不用考慮優化
2、當 QPS 達到 100 時,遇到數據查詢瓶頸
3、當 QPS 達到 800 時, 遇到帶寬瓶頸
優化方案:CDN 加速,負載均衡
4、當 QPS 達到 1000 時
優化方案: 做 html 靜態緩存
5、當 QPS 達到 2000 時
優化方案: 做業務分離,分布式存儲
五、高並發解決方案案例:
1、流量優化
防盜鏈處理(去除惡意請求)
2、前端優化
(1) 減少 HTTP 請求[將 css,js 等合並]
(2) 添加非同步請求(先不將所有數據都展示給用戶,用戶觸發某個事件,才會非同步請求數據)
(3) 啟用瀏覽器緩存和文件壓縮
(4) CDN 加速
(5) 建立獨立的圖片伺服器(減少 I/O)
3、服務端優化
(1) 頁面靜態化
(2) 並發處理
(3) 隊列處理
4、資料庫優化
(1) 資料庫緩存
(2) 分庫分表,分區
(3) 讀寫分離
(4) 負載均衡
5、web 伺服器優化
(1) nginx 反向代理實現負載均衡
(2) lvs 實現負載均衡
Ⅳ nginx 解決微信文章圖片防盜鏈
解決圖片防盜鏈的方法就是要把請求 頭的 referer 去掉就可以。
我們可以用 nginx 反向代理微信圖片的鏈接,並把請求的 referer 去掉。
使用 sub_filter 移除微信圖片的域名
到這兒以微信文章圖片防盜鏈
Ⅳ 網站防盜鏈怎麼解決
盜鏈網站無法下載,報盜鏈的問題。
要下載這類文件最簡單的方法就是改referer。
比方flashget中,網址下面的"引用"一欄中,直接填寫下載地址就可以了。