安全響應頭檢查

貼上某個頁面的響應頭 ——curl -sI https://your-site.example/終端裡那一堆,或瀏覽器 Network 面板裡那一塊 —— 就能得到A+ 到 F 的評級,依據是 OWASP 安全響應頭清單:Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options、框架巢狀防護、Referrer-Policy, Permissions-Policy、跨源隔離三件套、版本洩露、已廢棄的響應頭與 Cookie 標誌 —— 每條發現都配上nginx、Apache 和 Express 的修復配置行。全部在瀏覽器裡執行,本頁面絕不會去訪問你的站點。
狀態行可選。多行 Set-Cookie 都會被檢查。想先有一份可供評級的策略,可以用CSP 生成器制定;想把響應頭塊逐行拆開看,請用HTTP 響應頭解析器。
尚無評級。貼上響應頭並點選檢查響應頭,或者載入一個示例。
檢查一次之後,每條發現對應的修復行會出現在這裡。
本檢查器與 SSL 安全檢查的分工。本頁面給安全響應頭評級(即上面這份 OWASP 清單)。SSL 安全檢查給HTTPS 配置評級:證書鏈、協議版本、加密套件強度與混合內容。HSTS 和 Cookie 標誌在兩頁都會出現,因為兩份清單都包含它們,但視角不同 —— 兩個檢查都跑一遍才是完整的圖景。
自測
用固定的響應頭塊重跑評級器:好樣本得 A+,差樣本得 F 且每條扣分都被觸發,逐條規則單獨驗證(得分的算術),版本洩露的上限,Cookie 提示,CSP 質量提示,frame-ancestors 也算框架巢狀防護,每一檔評級閾值的兩側邊界,修復配置片段,以及反向路徑。不會向任何地方傳送資料。
什麼是安全響應頭?
一句話:安全響應頭是用來要求瀏覽器開啟某種它自己推斷不出來的防護的響應頭 —— 絕不從未知來源載入指令碼、絕不再對這個主機說明文 HTTP、絕不允許把本頁放進框架 —— 而每一個的代價只是一條配置。
本頁面評級的響應頭
響應頭防護物件OWASP 推薦值
Strict-Transport-Security首次明文 HTTP 請求被降級攻擊、Cookie 被盜max-age=63072000; includeSubDomains
Content-Security-Policy跨站指令碼、惡意嵌入內容、混合內容default-src 'self'; form-action 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests
X-Content-Type-OptionsMIME 型別混淆(指令碼被當成圖片提供)nosniff
X-Frame-Options / CSP frame-ancestors點選劫持(你的頁面被攻擊者放進框架)deny / 'none'
Referrer-Policy把帶令牌的 URL 洩露給第三方站點no-referrer
Permissions-Policy頁面與嵌入內容悄悄使用攝像頭、麥克風、地理位置關閉所有特性
Cross-Origin-Opener-Policy其他視窗伸進你的瀏覽上下文same-origin
Cross-Origin-Embedder-Policy載入未主動宣告加入的資源(啟用程序隔離)require-corp
Cross-Origin-Resource-Policy你的資源被其他站點嵌入same-origin
評級是怎麼算出來的

從 100 分開始扣分:缺失 CSP −25,缺失 HSTS −20,缺失 X-Content-Type-Options、Referrer-Policy 或任何框架巢狀防護各 −10,跨源三件套與 Permissions-Policy 各 −5,Server/X-Powered-By 的版本洩露 −5(封頂),X-XSS-Protection 非 0 值 −5。字母評級:100 = A+,90+ = A,80+ = B,70+ = C,60+ = D,其餘 = F。提示類條目(Cookie 標誌、快取控制、CSP 質量)不扣分。

常見錯誤
  • 把響應頭加在了錯誤的響應上。要給每一個響應都加上,包括錯誤頁和跳轉 —— nginx 的 add_header ... always; 與 Apache 的 Header always set 裡的 always 就是幹這個的。
  • 只測首頁。代理、快取和遺留應用常常只在某些路徑上刪掉或覆蓋響應頭。要檢查真正要緊的頁面:登入、結算、API 端點。
  • 還留著 X-XSS-Protection。它驅動的審查器自身就引發過漏洞,各瀏覽器已經移除它。現在非零值是故意要扣分的 —— 刪掉它,讓 CSP 來做這件事。
  • 以為 X-Frame-Options 還算現行方案。它無法允許特定來源,也不在 CSP 標準裡;frame-ancestors 才是現代的替代品。過渡期兩個都留著沒問題 —— 本頁面兩者都接受。
  • 把版本橫幅發出去。Server: Apache/2.4.58 (Unix) 會把攻擊者搜尋已知漏洞的範圍收窄,對你卻毫無好處。去掉版本號;順手把響應頭行數也降下來。
常見問題

為什麼 COOP/COEP/CORP 每個只值 5 分?這三個是最新的那一層,主要在你想要程序隔離時才需要(SharedArrayBuffer、Spectre 加固)。沒有它們的站點依然擁有核心防護;加上它們之後,某些跨源嵌入內容需要調整 —— 所以它們的權重低於 CSP 或 HSTS。

評級高就意味著站點安全嗎?不是 —— 它只說明響應頭設定到位了。安全響應頭只是其中一層:TLS 配置、會話處理、輸入校驗和補丁更新才真正決定站點是否安全。TLS 那一層請再跑一遍SSL 安全檢查。

為什麼我的 Permissions-Policy 值這麼長?OWASP 基線是把每一個特性都顯式關掉,這樣瀏覽器新增特性時也不會悄悄把它們重新開啟。camera=(), microphone=(), geolocation=() 這種短值是個開始 —— 但要知道它留下了哪些沒關。

能在這裡檢查任意站點的響應頭嗎?本頁面絕不發起網路請求 —— 它只給你貼上進來的文本評級,因此在防火牆後面和內網主機上都能用,你檢查的內容一點也不會離開你的機器。取響應頭只需在終端裡跑一條 curl -sI。

那 Clear-Site-Data 和 X-Permitted-Cross-Domain-Policies 呢?它們在很窄的場景下有用(登出響應;舊的 PDF/Flash 檢視器)。這裡只作提示,不計分 —— 對每個響應都發 Clear-Site-Data 會在每次載入頁面時清空使用者的儲存。