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

PHP 偽造 Referer 防盜鏈原理與實現方法詳解

     編輯:PHP 綜合知識

什麼是 HTTP Referer

HTTP Referer 是請求頭字段,告訴服務器請求來源頁面 URL。常用於統計來源、防盜鏈判斷。拼寫錯誤(Referer vs Referrer)已成標準。

偽造 Referer 的常見手段

1. PHP cURL

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => 'https://target.com/image.jpg',
    CURLOPT_REFERER => 'https://allowed.com/page.html', // 偽造來源
    CURLOPT_RETURNTRANSFER => true,
]);
$img = curl_exec($ch);
curl_close($ch);

2. PHP Socket (fsockopen)

$fp = fsockopen('target.com', 80, $errno, $errstr, 30);
if ($fp) {
    $out = "GET /image.jpg HTTP/1.1\r\n";
    $out .= "Host: target.com\r\n";
    $out .= "Referer: https://allowed.com/\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) echo fgets($fp, 128);
    fclose($fp);
}

3. 瀏覽器擴展

  • Firefox: RefControl、Modify Headers 可自定義每個域的 Referer 策略。
  • Chrome: Referer Control 擴展。

4. 代理工具

Privoxy 規則:{+hide-referrer{forge}} .target.com 自動將 Referer 偽造為目標 URL。

Apache 防盜鏈配置 (.htaccess)

SetEnvIfNoCase Referer "^https://www.allowed.com/" local_ref
SetEnvIf Referer "^$" local_ref  # 允許直接訪問(無Referer)

<FilesMatch "\.(gif|jpg|png)$">
    Order Deny,Allow
    Deny from all
    Allow from env=local_ref
</FilesMatch>

Nginx 防盜鏈配置

location ~* \.(gif|jpg|png)$ {
    valid_referers none blocked *.allowed.com allowed.com;
    if ($invalid_referer) {
        return 403; # 或重定向到默認圖片
    }
}

為什麼 Referer 不可靠

  • 客戶端可任意修改/刪除(擴展、代理、腳本)。
  • HTTPS → HTTP 請求瀏覽器不發送 Referer(RFC 7231 §5.5.2)。
  • 隱私模式/安全軟件會剝離 Referer。

更安全的防盜鏈方案

  1. 簽名 URL (帶過期時間): /img/photo.jpg?sign=xxx&expire=timestamp,服務端驗證簽名與時間。
  2. Token 驗證: 頁面渲染時生成一次性 Token 存入 Session/Redis,圖片請求攜帶 Token 驗證後刪除。
  3. 對象存儲 (OSS/COS/S3) 防盜鏈: 利用云廠商提供的 Referer 白名單 + 簽名 URL 雙重保護。
  4. User-Agent + IP + Referer 綜合判斷: 降低誤攔截正常用戶概率。

總結

Referer 只能阻擋「不懂技術的直接外鏈」,無法防止有意繞過的采集。生產環境請採用 簽名 URL + 對象存儲防盜鏈 組合方案。

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