用PHP偽造網站referer地址
很多時候我們都會用到referer地址,通過判斷上一頁是從哪裡來的,我們 可以瞭解很多信息,但是現在referer並不是那麼可靠的數據了,因 為我們可以偽造referer地址。這裡主要用到了四個函數:fsockopen(),header(),fputs(),fgets(),詳細代碼如 下:
$flag = 0;
$argv = array(
"uid"=>"6c82b9f5m1f4d8eleb21",
"langx"=>"zh-tw",
"rtype"=>"r",
"mtype"=>"3",
"league_id"=>""
);
foreach ($argv as $key=>$value) {
if ($flag!=0) {
$params .= "&";
$flag = 1;
}
$params.= $key."="; $params.= urlencode($value);
$flag = 1;
}
$length = strlen($params);
$fp = fsockopen("www.fesite.com",80,$errno,$errstr,10) or exit($errstr."--->".$errno);
$header = "POST:/test.php HTTP/1.0 \r\n";
$header .= "Host:www.fesite.com \r\n";
$header .= "Referer: http://www.fesite.com/ \r\n"; //注意這裡
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".$length."\r\n";
$header .= "Connection: Close\r\n\r\n";
$header .= $params."\r\n";
fputs($fp,$header);
$inheader = 1;
while (!feof($fp)) {
$line = fgets($fp,1024);
if ($inheader && ($line == "\n" || $line == "\r\n")) {
$inheader = 0;
}
if ($inheader == 0) {
$content.=$line;
}
}
echo $content;
fclose($fp);
通過上面的代碼,我們就把referer地址偽裝為http://www.fesite.com,你可以寫一段代碼:
$_SERVER['HTTP_REFERER'];
查看到這個referer地址,就是這麼簡單,所以referer也不是什麼可靠的數據了。
【本站遵守CC協議,轉載本站文章請註明原文地址和原作者,謝謝】
PHP能得到你是從什麼頁面過來的,referer的用處
在開發web程序的時候,有時我們需要得到用戶是從什麼頁面連過來的,這就用到了referer。
它是http協議,所以任何能開發web程序的語言都可以實現,比如jsp中是:
request.getHeader("referer");
php是$_SERVER['HTTP_REFERER']。其他的我就不舉例了(其實是不會其他的語言)。
那它能幹什麼用呢?我舉兩個例子:
1,防止盜連,比如我是個下載軟件的網站,在下載頁面我先用referer來判斷上一頁面是不是自己網站,如果不是,說明有人盜連了你的下載地址。
2,電子商務網站的安全,我在提交信用卡等重要信息的頁面用referer來判斷上一頁是不是自己的網站,如果不是,可能是黑客用自己寫的一個表單,來提交,為了能跳過你上一頁裡的javascript的驗證等目的。
使用referer的注意事項:
如果我是直接在瀏覽器裡輸入有referer的頁面,返回是null(jsp),也就是說referer只有從別的頁面點擊連接來到這頁的才會有內容。
我做了個實驗,比如我的referer代碼在a.jsp中,它的上一頁面是b.htm,c.htm是一個帶有iframe的頁面,它把a.jsp嵌 在iframe裡了。我在瀏覽器裡輸入b.htm的地址,然後點擊連接去c.htm,那顯示的結果是b.htm,如果我在瀏覽器裡直接輸入的是c.htm 那顯示的是c.htm