圖片防盜鏈原理及應對方法


一、原理

先說說防盜鏈的原理,http 協議中,如果從一個網頁跳到另一個網頁,http 頭字段里面會帶個 Referer。圖片服務器通過檢測 Referer 是否來自規定域名,來進行防盜鏈。

如果盜用網站是 https 的 protocol,而圖片鏈接是 http 的話,則從 https 向 http 發起的請求會因為安全性的規定,而不帶 referer,從而實現防盜鏈的繞過。

比如現在在 cnode 這里,由於我們啟用了 https,所以任何 http 的圖片幾乎都可以直接貼過來並顯示了。

 

官方輸出圖片的時候,判斷了來源(Referer),就是從哪個網站訪問這個圖片,如果是你的網站去加載這個圖片,那么Referer就是:你的網站地址;;你網站地址,肯定沒在官方的白名單內,所以就看不到圖片了。

因此,若不發送Referer,也就是沒有來源。那么官方那邊,就認為是從瀏覽器直接訪問的,所以就能加載正常的圖片了。

 

二、應對方法

破解盜鏈

  實現代碼:

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、登錄校驗(如必須登錄網站帳號后才能訪問)

  原文鏈接:javascript 破解允許空白referer的防盜鏈圖片


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM