大多數 Web 掃描器(目錄掃描、後台尋找、漏洞探測)依賴 HTTP 狀態碼 200 OK 判斷資源存在。在權限驗證失敗時主動返回 404 Not Found,可讓掃描器誤以為頁面不存在,從而跳過後續掃描。
<?php
// 必須在任何輸出前調用
ob_start();
if (($_GET['password'] ?? '') !== 'StrongSecret123') {
// 偽造 404,欺騙掃描器
header("HTTP/1.1 404 Not Found");
// 可選:輸出友好 404 頁面
include '404.html';
ob_end_flush();
exit;
}
// 正常業務邏輯
?>
<!DOCTYPE html>
<html><head><title>Secret Panel</title></head>
<body>...</body></html>
<?php ob_end_flush(); ?>
<?php
function deceiveScanner(): void {
$codes = [404, 403, 500, 503];
$code = $codes[array_rand($codes)];
header("HTTP/1.1 {$code} " . [404=>'Not Found',403=>'Forbidden',500=>'Internal Server Error',503=>'Service Unavailable'][$code]);
// 隨機延遲 100-500ms 增加掃描成本
usleep(mt_rand(100_000, 500_000));
exit;
}
故意返回錯誤狀態碼可能違反 HTTP 語義,建議僅在管理後台、內部介面、蜜罐頁面使用,公開頁面應誠實返回 403/401 並配合友好提示。