網站的防盜鏈與反盜鏈的那點事


      最近幫朋友做一數據采集器,將A網站上的數據自動采集到B網站上,在做的過程中遇到網站的盜鏈問題。很不幸的出現下列的畫面:

      盜鏈

       很不幸我們采集數據的網站設置了防盜鏈機制,遇到問題就要解決,如下,就細細的探討一下我對這個東東的理解吧:

      一  什么是網站防盜鏈與反盜鏈:

          首先說一下什么是網站的防盜鏈:防盜鏈是一種機制,也可以說是一種技術.目的就是防止自己網站上的東西(如圖片,文件 etc。)被其他用戶采用其他的技術手段來訪問或者下載,這種機制在google,sina,天涯上很普遍,再說為什么不讓你盜鏈呢,既然不讓盜鏈肯定涉及到一些利益的問題,呵呵,這是我猜想。因為盜鏈的話就會分散主網站的流量(^_^流量可是很多網站的錢途啊)。那么它是如何實現的呢,或者是怎么才能做到自己網站上的東西不被別人盜鏈呢,要說這個就有必要說說他的原理。我們知道在網絡上我們每次發送一個請求的時候都會生成一個http請求,然后服務器會對這個http請求進行解析,那么一個http請求中有什么標志或者說是什么作用來實現防止盜鏈的作用呢,下面我們看一個簡單的http請求(http的請求和相應后頭我們再說),看看再http請求中有什么是可以用來作為盜鏈的標志的呢:

圖片

上圖是我們在請求www.baidu.com的時候在加載顯示在百度首頁上的圖片時發生的http請求和響應,

我們看圖片中的兩個紅色的標記處,第一行是請求的圖片的地址,第二行是我們今天要說的Referer :請求圖片來源,這里顯示的是www.baidu.com,說明這個圖片是在百度的圖片服務器上下載下來的。那么這里問題就得到解決了,既然可以得到這個圖片的來源Referer,服務器就可以通過判斷Referer中的值是不是自己網站服務器的域名來判斷這個請求是不是別人盜鏈的,也就是請求沒有在自己的網站上發出。利用referer來防止盜鏈的技術原理就是這樣的,我們在請求的時候瀏覽器發送到服務器端的時候就會在request中有這個Referer,當然也有人說,我在瀏覽器輸入框中手動的輸入圖片的下載地址也可以下載啊,是這樣的,那這是為什么呢?我只能說你遇到的是大部分的網站,但是也有一些防盜鏈機制很嚴格的即使你自己手動的在瀏覽器輸入框中輸入也不能看到圖片,問題就是對大部分的網站在手動輸入請求地址的時候Referer是空的(null),服務器就會認為你是手動的在下載圖片,這樣服務器是不會去攔截的,你很幸運的就可以看到那個妹妹的圖片了。

         上面說的只是防盜鏈機制中的一種:通過http請求中的Referer來判斷,

          還有如下幾種方式也可以實現:1 nginx在處理每一個靜態的頁面請求的時候也可以攔截處理,2 通過用戶是否登錄來判斷(這里主要是session在起作用)。。。可能還有其他的方式,待我研究研究在和大家交流。

2 什么是反盜鏈:

        既然有防盜鏈的機制,那么對於很多的有哪些需求的淫來說我得可以搞到我需要的東東啊(當然首先聲明啊,這是很不道德的,我們只是就技術而言來討論這個問題,很不贊成大家去這樣做)。這就需要去反盜鏈,在這里我只針對利用http請求request中的referer的機制來分析一下反盜鏈機制,對於利用mginx和用戶登錄的方式暫時不是很容易實現反盜鏈。既然在referer中是利用referer中的值來判斷請求是否是盜鏈的,那么我們就可以利用相應的技術手段來改變這個referer的值來實現。

        今天就寫到這里吧,要去開會了,反盜鏈的問題我們下回再細說。。。。。。

        好了接着咱的反盜鏈之路:

        上面說過既然有防盜鏈那么就會有反盜鏈的技術去破解這個問題,下面就說說如何來解決通過referer來實現的防盜鏈機制:

         對於不同語言開發者而言去操作這個http中的request的referer這個值得方式是不一樣的,就比如說servlet來處理這個referer的話就是先得到這個http請求request中的referer,通過一個攔截器的方式去攔截這個請求,然后對這個referer值進行修改,那么如何修改呢,肯定是修改為盜鏈網站的域名。至於這個攔截器怎么去編寫大家應該都會,.net在操作這個referer值的時候也是一樣的,或者是用一個攔截器去請求,或者是讓請求指向特定的請求地址,在特定的請求地址中對這個referer進行包裝。比如我想盜鏈www.aaa.com上的一個圖片,這個圖片的請求地址是www.aaa.com/image/1,jpg。那么在請求的時候我們可以讓請求指向www.ourserver.com/handleRequest.asp?url=www.aaa.com/image/1,jpg中,在這個處理器中對referer進行重新的包裝,怎么包裝呢,就是講referer的值制定為www.aaa.com。這樣www.aaa.com在接到圖片請求地址的時候就會去判斷請求中的referer值,這時因為我們對referer值已經進行了重新的包裝,就可以通過www.aaa.com的校驗。

      甚至其他的幾種方式:如通過nginx,和登錄session的方式的反盜鏈比較麻煩,后續學習學習再和大家探討吧。

      最后聲明一點:我們只是在就技術論技術,並不提倡大家去盜鏈別人的網站,因為這是不道德的同時也是不合法的。大家在學習的過程中重要的是技術本身,而不是技術所進行的行為,與大家共勉!!!


免責聲明!

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



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