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

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

      盜鏈

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

      一  什麼是網站防盜鏈與反盜鏈:服務器

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

圖片

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

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

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

          還有以下幾種方式也能夠實現:1 nginx在處理每個靜態的頁面請求的時候也能夠攔截處理,2 經過用戶是否登陸來判斷(這裏主要是session在起做用)。。。可能還有其餘的方式,待我研究研究在和你們交流。google

2 什麼是反盜鏈:url

        既然有防盜鏈的機制,那麼對於不少的有哪些需求的淫來講我得能夠搞到我須要的東東啊(固然首先聲明啊,這是很不道德的,咱們只是就技術而言來討論這個問題,很不同意你們去這樣作)。這就須要去反盜鏈,在這裏我只針對利用http請求request中的referer的機制來分析一下反盜鏈機制,對於利用mginx和用戶登陸的方式暫時不是很容易實現反盜鏈。既然在referer中是利用referer中的值來判斷請求是不是盜鏈的,那麼咱們就能夠利用相應的技術手段來改變這個referer的值來實現。.net

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

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

        上面說過既然有防盜鏈那麼就會有反盜鏈的技術去破解這個問題,下面就說說如何來解決經過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的方式的反盜鏈比較麻煩,後續學習學習再和你們探討吧。

      最後聲明一點:咱們只是在就技術論技術,並不提倡你們去盜鏈別人的網站,由於這是不道德的同時也是不合法的。你們在學習的過程當中重要的是技術自己,而不是技術所進行的行爲,與你們共勉!!!

相關文章
相關標籤/搜索