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

1、原理javascript

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

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

好比如今在 cnode 這裏,因爲咱們啓用了 https,因此任何 http 的圖片幾乎均可以直接貼過來並顯示了。node

 

官方輸出圖片的時候,判斷了來源(Referer),就是從哪一個網站訪問這個圖片,若是是你的網站去加載這個圖片,那麼Referer就是:你的網站地址;;你網站地址,確定沒在官方的白名單內,因此就看不到圖片了。nginx

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

 

2、應對方法安全

破解盜鏈服務器

  實現代碼:dom

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點:

  一、不容許referer爲空(不建議,因在某些開啓隱私模式的瀏覽器中,或https頁面引用下,referer是空的)
  二、地址變動(lighttpd的是根據有效時間,nginx的根據是md5)
  三、登陸校驗(如必須登陸網站賬號後才能訪問)

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

相關文章
相關標籤/搜索