HTTP_REFERER的用法及偽造
引言
在php中,可以使用$_SERVER[‘HTTP_REFERER’]來獲取HTTP_REFERER信息,關(guān)于HTTP_REFERER,php文檔中的描述如下:
“引導(dǎo)用戶代理到當(dāng)前頁的前一頁的地址(如果存在)。由 user agent 設(shè)置決定。并不是所有的用戶代理都會設(shè)置該項,有的還提供了修改 HTTP_REFERER 的功能。簡言之,該值并不可信。 ”
在百度百科中,對于該參數(shù)的描述如下:
“HTTP Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請求的時候,一般會帶上Referer,告訴服務(wù)器我是從哪個頁面鏈接過來的,服務(wù)器籍此可以獲得一些信息用于處理?!?/p>
從上面的論述中我們可以得到如下幾點結(jié)論:
http_referer由瀏覽器生成,并不是所有瀏覽器都會設(shè)置該值。 http_referer可以偽造,并不可信。
;
重點是c站的代碼,如下所示:
這樣當(dāng)a站訪問時圖片可以正常顯示,而b站訪問時圖片是顯示不出來的。
什么時候獲取不到HTTP_REFERER值
綜上所述,HTTP_REFERER存在需要兩個條件:
瀏覽器(客戶端)請求(服務(wù)器端請求的情況下,是不存在HTTP_REFERER的,但是可以偽造header,這在下一節(jié)中將提及);
存在前導(dǎo)頁;
以下是網(wǎng)友收集的獲取不到HTTP_REFERER值的情況:
在瀏覽器內(nèi)直接敲URL
windows桌面上的超鏈接圖標(biāo)
瀏覽器內(nèi)書簽
第三方軟件(如Word,Excel等)內(nèi)容中的鏈接
SSL認(rèn)證網(wǎng)站跳入
http://example.com/“> meta頁面設(shè)置自動跳轉(zhuǎn)時,在example.com將取不到REFERER URL
使用JavaScript的Location.href或者是Location.replace()
在以下情況下可以獲取HTTP_REFERER值:
直接用
form提交的表單(POST或GET)
src請求(如js的script標(biāo)簽及html中img標(biāo)簽的src屬性)
如何偽造HTTP_REFERER
前面提到HTTP_REFERER是可以偽造的,那么在php中,如何偽造HTTP_REFERER呢?有如下三種方法:
首先是接口代碼:
'ok', 'refer' => $HTTP_REFERER ) ));
curl
代碼示例:
執(zhí)行結(jié)果如下:
偽造成功。
file_get_contents
一直沒怎么用過file_get_contents來發(fā)送post請求,其實file_get_contents可以發(fā)送任何http請求,后期會針對性的整理一篇文章出來。
代碼示例:
$opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Referer: http://www.google.com" ) ); $context = stream_context_create($opts); // Open the file using the HTTP headers set above var_dump(file_get_contents('http://www.c.com/api.php', false, $context));
執(zhí)行結(jié)果:
偽造成功
socket
代碼示例:
$fp = fsockopen("www.c.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)
\n"; } else { $out = "GET /api.php HTTP/1.1\r\n"; $out .= "Host: www.c.com\r\n"; $out .= "Referer: www.google.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
執(zhí)行結(jié)果:
偽造成功。
在做這次測試的時候,第一次執(zhí)行報錯:Your browser sent a request that this server could not understand.
后來發(fā)現(xiàn)是$out = “GET api.php HTTP/1.1\r\n”;中少了’/’,糾結(jié)了老半天,暈死
---------------------
原文:https://blog.csdn.net/u011250882/article/details/49679535
HTTP PHP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。