近期發現有人利用反向代理技術「盜用」本站數據,搭建鏡像站點誤導用戶並竊取流量。這不僅消耗服務器資源,更可能導致搜索引擎降權、廣告聯盟封號等嚴重後果。本文系統梳理反向代理原理、危害,並提供 JavaScript、PHP、.htaccess、Nginx/Apache 等多層級防禦方案,幫助站長構建立體防護體系。
正向代理:客戶端主動配置,通過代理服務器訪問目標站點,隱藏客戶端真實 IP。
反向代理:客戶端無感知,訪問 proxy.com 實際由代理服務器從 origin.com 取內容返回。對用戶來說,代理服務器就是源站。
惡意反向代理即:攻擊者配置 evil.com 反向代理到 victim.com,用戶訪問 evil.com 看到的內容完全來自 victim.com,卻以為是前者原創。
| 層級 | 方案 | 優點 | 缺點 |
|---|---|---|---|
| JavaScript | 檢測 document.domain 強制跳轉 | 部署簡單,無需服務器配置 | 可被禁用 JS 繞過;搜索引擎可能不執行 JS,SEO 效果有限 |
| PHP | 校驗 $_SERVER['SERVER_NAME'] 或 HTTP_HOST | 服務端強制攔截,對爬蟲/SEO 友好 | 需修改代碼入口;若代理轉發了 Host 頭可能失效 |
| .htaccess / Nginx | 基於 HTTP_X_FORWARDED_FOR、HTTP_HOST 判斷並拒絕/重寫 | 性能最好,攔截在應用層之前 | 配置較複雜;需確認代理頭可靠性 |
<script>
(function() {
var allowed = ['nowamagic.net', 'www.nowamagic.net'];
var current = document.domain.toLowerCase();
if (allowed.indexOf(current) === -1) {
window.location.href = 'https://www.nowamagic.net/';
}
})();
</script>
同理可防 iframe 嵌套:
<script>
if (top.location !== self.location) top.location = self.location;
</script>
在統一入口文件(如 index.php 或公共引導文件)最開頭加入:
<?php
function is_allowed_host() {
$allowed = ['nowamagic.net', 'www.nowamagic.net'];
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
// 若使用了 CDN/負載均衡,真實 Host 可能在 HTTP_X_FORWARDED_HOST
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$host = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
return in_array(strtolower($host), $allowed);
}
if (!is_allowed_host()) {
header('HTTP/1.1 403 Forbidden');
exit('非法反向代理訪問,已拒絕服務。');
}
進階:結合 HTTP_X_FORWARDED_FOR 判斷是否經過代理,僅允許直連或受信代理 IP。
# .htaccess
RewriteEngine On
# 檢測是否為惡意代理請求(非本域 Host 且帶有 X-Forwarded-For)
RewriteCond %{HTTP:X-Forwarded-For} !^$
RewriteCond %{HTTP_HOST} !^(www\.)?nowamagic\.net$ [NC]
RewriteRule ^ - [F,L]
或使用獨立腳本 proxy.php 配合 auto_append_file:
# .htaccess
php_value auto_append_file /path/to/proxy.php
<?php
// proxy.php
$forwarded = getenv('HTTP_X_FORWARDED_FOR');
$host = getenv('HTTP_HOST');
if ($forwarded && !in_array($host, ['nowamagic.net', 'www.nowamagic.net'])) {
header('HTTP/1.1 403 Forbidden');
exit('本服務器禁止惡意反向代理!');
}
server {
listen 80;
server_name www.nowamagic.net nowamagic.net;
# 僅允許合法 Host,其他直接 444 斷開連接(不返回任何響應)
if ($host !~* ^(www\.)?nowamagic\.net$) {
return 444;
}
# 或檢測 X-Forwarded-For 存在且 Host 不合法
# set $block 0;
# if ($http_x_forwarded_for != '') { set $block 1; }
# if ($host !~* 'nowamagic\.net') { set $block "${block}1"; }
# if ($block = 11) { return 403; }
location / {
proxy_pass https://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Nginx 的 444 狀態碼會直接關閉 TCP 連接,極其高效。
Host 為源站域名,避免應用層誤判。<link rel="canonical" href="https://www.nowamagic.net/...">,引導搜索引擎識別原始出處。惡意反向代理屬於「低成本、高危害」的灰產手段。通過「邊緣攔截(Nginx)+ 應用校驗 + 客戶端兜底」的立體防禦,可將損失降至最低。建議站長根據架構複雜度選擇合適層級,並納入常規安全巡檢清單。