首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 偽造 HTTP_REFERER 的實作技巧與代碼範例

     編輯:PHP 相關知識

前言

在開發網頁爬蟲、測試防盜鏈或模擬瀏覽器行為時,我們常需要偽造 HTTP Referer 標頭。PHP 雖然沒有內建直接修改發出請求 Referer 的函數,但透過底層的 Socket 連線,我們可以手動構建 HTTP 請求標頭,從而實現 Referer 偽造。

核心代碼解析

以下範例展示如何使用 fsockopen 建立 TCP 連線,並手動發送帶有自訂 Referer 的 GET 請求:

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
set_time_limit(0);

$server = 'www.example.com';   // 目標服務器 IP 或域名
$host   = 'www.example.com';   // Host 標頭
$target = '/test.php?x=1';     // 請求路徑
$referer = 'https://www.referrer.com/page.html'; // 偽造的 Referer
$port   = 80;

$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp) {
    echo "<h1>無法連接遠程服務器</h1><h3>$errstr ($errno)</h3>";
} else {
    $out = "GET $target HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Referer: $referer\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

關鍵點說明

  • fsockopen:建立原始 Socket 連線,繞過 PHP 高層 HTTP 封裝,獲得完全的標頭控制權。
  • 手動構建請求行與標頭:必須遵循 HTTP/1.1 規範,包含 Host、Referer、Connection 等標頭,並以雙 CRLF (\r\n\r\n) 結束標頭區塊。
  • 錯誤處理:檢查連線是否成功,捕獲錯誤號與錯誤訊息。

應用場景與注意事項

此技巧常用於:

  1. 測試防盜鏈機制是否有效
  2. 模擬特定來源流量進行壓力測試
  3. 繞過簡單的 Referer 檢查(注意:現代網站常配合 Token、Cookie 等二次驗證)

安全提醒:偽造 Referer 可能違反目標網站服務條款,請僅在授權測試或學習研究範圍內使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved