HTTP Referer(標準拼寫為 Referrer)是請求標頭之一,告知伺服器請求來源頁面。雖可用於防盜鏈、統計分析,但極易偽造,絕不可用於身份驗證等安全關鍵邏輯。本文系統整理原理、防盜鏈配置、偽造手法與防禦建議。
network.http.sendRefererHeader)、Proxy(Privoxy)、程式庫(cURL、fsockopen)任意修改或隱藏。<!-- 僅允許自家域名與直接訪問 -->
SetEnvIfNoCase Referer "^https?://(www\.)?example\.com/" local_ref
SetEnvIf Referer "^$" local_ref
<FilesMatch "\.(gif|jpe?g|png|webp)$">
Order Deny,Allow
Deny from all
Allow from env=local_ref
</FilesMatch>
或針對目錄:
<Directory "/var/www/images">
Order Deny,Allow
Deny from all
Allow from env=local_ref
</Directory>
$ch = curl_init('https://target.com/image.jpg');
curl_setopt($ch, CURLOPT_REFERER, 'https://allowed.com/');
curl_exec($ch);
$fp = fsockopen('target.com', 80);
fwrite($fp, "GET /image.jpg HTTP/1.1\r\nHost: target.com\r\nReferer: https://allowed.com/\r\nConnection: Close\r\n\r\n");
瀏覽器安全策略禁止 JS 任意設定 Referer,xmlHttp.setRequestHeader('Referer', ...) 會被忽略或拋錯。
Referer 是「禮貌性」標頭,非「安全性」憑證。防盜鏈配置簡單有效,能阻擋 90% 以上誤連與簡單爬蟲,但絕不可作為授權依據。