亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語(yǔ)言

使用php偽造referer的方法

時(shí)間:2024-11-12 05:33:18 php語(yǔ)言 我要投稿
  • 相關(guān)推薦

使用php偽造referer的方法

  當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器我是從哪個(gè)頁(yè)面鏈接過來(lái)的,服務(wù)器籍此可以獲得一些信息用于處理,不過這個(gè)Referer是可以偽造。下面是小編為大家?guī)?lái)的使用php偽造referer的方法,歡迎閱讀。

  使用php偽造referer的方法

  什么是HTTP Referer

  簡(jiǎn)言之,HTTP Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器我是從哪個(gè)頁(yè)面鏈接過來(lái)的,服務(wù)器籍此可以獲得一些信息用于處理。比如從我主頁(yè)上鏈接到一個(gè)朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁(yè)上的鏈接訪問他的網(wǎng)站。

  Referer其實(shí)應(yīng)該是英文單詞Referrer,不過拼錯(cuò)的人太多了,所以編寫標(biāo)準(zhǔn)的人也就將錯(cuò)就錯(cuò)了。

  我的問題

  我剛剛把feed閱讀器改變?yōu)镚regarius,但他不像我以前用的liferea,訪問新浪博客的時(shí)候,無(wú)法顯示其中的圖片,提示“此圖片僅限于新浪博客用戶交流與溝通”,我知道,這就是HTTP Referer導(dǎo)致的。

  由于我上網(wǎng)客戶端配置的特殊性,首先懷疑是squid的問題,但通過實(shí)驗(yàn)排除了,不過同時(shí)發(fā)現(xiàn)了一個(gè)Squid和Tor、Privoxy協(xié)同使用的隱私泄露問題,留待以后研究。

  Gregarius能處理這個(gè)問題么?

  答案是否定的,因?yàn)镚regarius只是負(fù)責(zé)輸出html代碼,而對(duì)圖像的訪問是有客戶端瀏覽器向服務(wù)器請(qǐng)求的。

  不過,安裝個(gè)firefox擴(kuò)展也許能解決問題,文中推薦的”Send Referrer”我沒有找到,但發(fā)現(xiàn)另外一個(gè)可用的:”RefControl“,可以根據(jù)訪問網(wǎng)站的不同,控制使用不同的Referer。

  但是我不喜歡用Firefox擴(kuò)展來(lái)解決問題,因?yàn)槲矣X得他效率太低,所以我用更好的方式——Privoxy。

  Privoxy真棒

  在Privoxy的default.action中添加兩行:

  {+hide-referrer{forge}}

  .album.sina.com.cn

  這樣Gregarius中新浪博客的圖片就出來(lái)了吧?+hide-referrer是Privoxy的一個(gè)過濾器,設(shè)置訪問時(shí)對(duì)HTTP Referer的處理方式,后面的forge代表用訪問地址當(dāng)作Refere的,還可以換成block,代表取消Referer,或者直接把需要用的Referer網(wǎng)址寫在這里。

  用Privoxy比用Firefox簡(jiǎn)單的多,趕緊換吧。

  From https to http

  我還發(fā)現(xiàn),從一個(gè)https頁(yè)面上的鏈接訪問到一個(gè)非加密的http頁(yè)面的時(shí)候,在http頁(yè)面上是檢查不到HTTP Referer的,比如當(dāng)我點(diǎn)擊自己的https頁(yè)面下面的w3c xhtml驗(yàn)證圖標(biāo)(網(wǎng)址為http://XXX),從來(lái)都無(wú)法完成校驗(yàn),提示:

  No Referer header found!

  原來(lái),在http協(xié)議的rfc文檔中有定義:

  代碼如下:

  15.1.3 Encoding Sensitive Information in URI's

  Clients SHOULD NOT include a Referer header field in a (non-secure)

  HTTP request if the referring page was transferred with a secure

  protocol.

  這樣是出于安全的考慮,訪問非加密頁(yè)時(shí),如果來(lái)源是加密頁(yè),客戶端不發(fā)送Referer,IE一直都是這樣實(shí)現(xiàn)的,F(xiàn)irefox瀏覽器也不例外。但這并不影響從加密頁(yè)到加密頁(yè)的訪問。

  Firefox中關(guān)于Referer的設(shè)置

  都在里,有兩個(gè)鍵值:

  network.http.sendRefererHeader (default=2) 設(shè)置Referer的發(fā)送方式,0為完全不發(fā)送,1為只在點(diǎn)擊鏈接時(shí)發(fā)送,在訪問頁(yè)面中的圖像什么的時(shí)候不發(fā)送,2為始終發(fā)送。參見Privacy Tip #3: Block Referer Headers in Firefox

  network.http.sendSecureXSiteReferrer (default=true) 設(shè)置從一個(gè)加密頁(yè)訪問到另外一個(gè)加密頁(yè)的時(shí)候是否發(fā)送Referer,true為發(fā)送,false為不發(fā)送。

  利用Referer防止圖片盜鏈

  雖然Referer并不可靠,但用來(lái)防止圖片盜鏈還是足夠的,畢竟不是每個(gè)人都會(huì)修改客戶端的配置。實(shí)現(xiàn)一般都是通過apache的配置文件,首先設(shè)置允許訪問的地址,標(biāo)記下來(lái):

  # 只允許來(lái)自don.com的訪問,圖片可能就放置在don.com網(wǎng)站的頁(yè)面上

  SetEnvIfNoCase Referer "^http://www.don.com/" local_ref

  # 直接通過地址訪問

  SetEnvIf Referer "^$" local_ref

  然后再規(guī)定被標(biāo)記了的訪問才被允許:

  代碼如下:

  <FilesMatch ".(gif|jpg)">

  Order Allow,Deny

  Allow from env=local_ref

  </FilesMatch>

  或者

  代碼如下:

  <Directory /web/images>

  Order Deny,Allow

  Deny from all

  Allow from env=local_ref

  </Directory>

  不要使用Rerferer的地方

  不要把Rerferer用在身份驗(yàn)證或者其他非常重要的檢查上,因?yàn)镽erferer非常容易在客戶端被改變,不管是通過上面介紹的Firefox擴(kuò)展,或者是Privoxy,甚至是libcurl的調(diào)用,所以Rerferer數(shù)據(jù)非常之不可信。

  如果你想限制用戶必須從某個(gè)入口頁(yè)面訪問的話,與其使用Referer,不如使用session,在入口頁(yè)面寫入session,然后在其他頁(yè)面檢查,如果用戶沒有訪問過入口頁(yè)面,那么對(duì)應(yīng)的session就不存在,參見這里的討論。不過和上面說的一樣,也不要過于相信這種方式的“驗(yàn)證”結(jié)果。

  個(gè)人感覺現(xiàn)在Rerferer除了用在防盜鏈,其他用途最多的就是訪問統(tǒng)計(jì),比如統(tǒng)計(jì)用戶都是從哪里的鏈接訪問過來(lái)的等等。

  HTTP-REFERER這個(gè)變量已經(jīng)越來(lái)越不可靠了,完全就是可以偽造出來(lái)的東東。

  以下是偽造方法:

  PHP(前提是裝了curl):

  代碼如下:

  $ch = curl_init();

  curl_setopt ($ch, CURLOPT_URL, "http://www.XXX.cn/xxx.asp");

  curl_setopt ($ch, CURLOPT_REFERER, "http://www.XXX.cn/");

  curl_exec ($ch);

  curl_close ($ch);

  PHP(不裝curl用sock)

  $server = 'www.dc9.cn';

  $host = 'www.dc9.cn';

  $target = '/xxx.asp';

  $referer = 'http://www.XXX.cn/'; // Referer

  $port = 80;

  $fp = fsockopen($server, $port, $errno, $errstr, 30);

  if (!$fp)

  {

  echo "$errstr ($errno)<br />n";

  }

  else

  {

  $out = "GET $target HTTP/1.1rn";

  $out .= "Host: $hostrn";

  $out .= "Cookie: ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEGrn";

  $out .= "Referer: $refererrn";

  $out .= "Connection: Closernrn";

  fwrite($fp, $out);

  while (!feof($fp))

  {

  echo fgets($fp, 128);

  }

  fclose($fp);

  }

  javascript

  xmlHttp.setRequestHeader("Referer", "http://URL");//   呵呵~假的`~

  JS不支持^_^

  原理都是sock構(gòu)造http頭來(lái)senddata。其他語(yǔ)言什么的比如perl也可以,

  目前比較簡(jiǎn)單的防御偽造referer的方法是用驗(yàn)證碼(Session)。

  現(xiàn)在有一些能防盜鏈軟件的商業(yè)公司比如UUDOG,linkgate,VirtualWall什么的,都是開發(fā)的應(yīng)用于IIS上面的dll。

  有的是采用cookies驗(yàn)證、線程控制,有的是能隨機(jī)生成文件名然后做URL重寫。有的方法能的確達(dá)到不錯(cuò)的效果.

  不過道高一尺,魔高一丈,這些雕蟲小技終歸是有破解方法的。

  一般的就是這樣的了,但是服務(wù)器就不好實(shí)現(xiàn)偽造,只能制造不多的數(shù)據(jù)了,如果可以實(shí)現(xiàn)訪問網(wǎng)頁(yè)就可以偽造,那就可以實(shí)現(xiàn)了真正的偽造,實(shí)現(xiàn)自然IP分布。


【使用php偽造referer的方法】相關(guān)文章:

PHP中用CURL偽造IP來(lái)源的方法06-26

php使用sessioncookie變量的方法06-09

PHP中魔術(shù)方法的使用方法10-15

PHP中trait的使用方法08-20

PHP autoload函數(shù)的使用方法10-22

PHP使用中數(shù)據(jù)庫(kù)使用方法05-21

php中iconv函數(shù)使用方法08-23

PHP創(chuàng)建和使用sessioncookie變量的方法08-23

PHP校驗(yàn)ISBN碼函數(shù)的使用方法10-25

使用偽造的駕駛證怎么處罰09-21