1. 程式人生 > >HTTP協議之防盜鏈與反防盜鏈

HTTP協議之防盜鏈與反防盜鏈

使用HTTP協議。利用referer做防盜鏈(不需要用PHP編寫,而是在伺服器層面控制就OK了)

我們在網頁裡訪問站外的圖片的時候,在圖片本站是可以看得,在外頭就不能看了
因為header資訊中的referer元素。
還有是做統計的時候,
我們能夠統計出來使用者是從哪個地方,什麼時間訪問網站的。比如騰訊分析網站
統計的時候是靠什麼知道使用者從什麼地方去的網站


在HTTP協議中  頭資訊中有一個很重要的選項 referer
referer 表示的是網頁的來源以及上一頁的地址
如果直接在瀏覽器輸入地址,進入網站,則沒有referer頭資訊


所以,伺服器可根據referer來知道使用者從哪個網站進來的和圖片是從哪個網站進來的

利用referer頭資訊來設定防盜鏈的具體操作步驟如下:

  1. /** 
  2. 如何配置apache伺服器。用於圖片防盜鏈(使用url重寫) 
  3.     在web伺服器層面,我們可以在http協議的referer頭資訊來判斷, 
  4.                         如果來自站外,則統一重寫到一個很小的防盜鏈提醒圖片上去 
  5. 步驟: 
  6.     1.開啟 apache 重寫模組 mod_rewrite     
  7.         (D:\wamp\bin\apache\apache2.4.9\conf)    
  8.         #LoadModule rewrite_module modules/mod_rewrite.so               
     
  9.             把#去掉,重啟apache 
  10.     2.在需要防盜的網站或者目錄下,寫 .htaccess 檔案(windows下不能直接建立,可以另存) 
  11.             並指定防盜鏈規則 
  12.                 分析referer資訊,如果不是來自本站,則重寫 
  13. **/
  14. 重寫規則 .htaccess 檔案  
  15.  1.哪種情況重寫規則  
  16.     是jpeg/gif/png圖片的時候  
  17.     是referer頭與localhost不匹配的時候  
  18.  2.怎麼重寫  
  19.     統一 rewrite 到某個防盜鏈圖片上  
  20.     RewriteEngine On  
  21.     //只是在改頁面下生效
  22.     Rewrite Base /HTTPxieyi/day1  
  23.     //會對以下格式的檔案進行重寫規則
  24.     RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]  
  25.     //如果不是來自localhost的使用者,會重寫
  26.     RewriteCond %{HTTP_REFERER} !localhost [NC]  
  27.     //會重寫到自學it網的logo上   
  28.     RewriteRule .* http://www.zixue.it/static/image/common/zixuelogo.png
html的具體程式碼如下
  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4.     <metacharset="UTF-8">
  5.     <title>圖片的防盜鏈</title>
  6. </head>
  7. <body>
  8.     <p>
  9.         <imgsrc="http://imgsrc.baidu.com/forum/w%3D580%3B/sign=5547962a02d162d985ee621421e4a8ec/0d338744ebf81a4c06403427df2a6059242da6ea.jpg"alt="">
  10.         <imgsrc="./bb.jpg"alt="">
  11.         <imgsrc="./aa.jpg"alt="">
  12.     </p>
  13. </body>
  14. </html>
反防盜鏈的具體程式碼如下:
  1. <?php   
  2. /** 
  3. 反防盜鏈 
  4. ****/
  5. require('./07.class.php');  
  6. $http = new Http('http://localhost/HTTPxieyi/day1/bb.jpg');  
  7. //如果沒有加以下這句話,就會顯示盜鏈
  8. //加上referer就會告訴瀏覽器,我是來自localhost的,不是來自其他網站的,你不用防我
  9. $http->setHeader('Referer: http://localhost');  
  10. $res = $http->get();  
  11.     //aaa.顯示的倒鏈
  12. //file_put_contents('./aaa.jpg',substr(strstr($res,"\r\n\r\n"),4));
  13. file_put_contents('./bbb.jpg',substr(strstr($res,"\r\n\r\n"),4));  
  14. //應該在判斷路徑或者response的mime頭資訊,確定圖片的型別

轉自:http://blog.csdn.net/xiao_tommy/article/details/53186201