在現代web 開發中,確保網站的安全性是開發者的重要職責。瀏覽器提供了許多機制,可以通過設置特定的HTTP 頭(HTTP Headers)來增強網站的安全性,例如X-Frame-Options 、 X-Content-Type-Options和Strict-Transport-Security等。這些HTTP 頭可以幫助防止點擊劫持、MIME 類型混淆、跨站點腳本(XSS)等攻擊。
在PHP 中,設置HTTP 頭最常用的方式就是使用header()函數。本文將詳細介紹如何用PHP 的header()函數設置X-Frame-Options以及其他常見的安全HTTP 頭。
X-Frame-Options用於防止網頁被嵌入到<iframe> 、 <frame>或<object>中,防止點擊劫持(clickjacking)攻擊。
示例代碼:
<?php
// 禁止頁面被嵌入到 iframe 中
header('X-Frame-Options: DENY');
// 只允許同域名嵌入
// header('X-Frame-Options: SAMEORIGIN');
// 允許特定的第三方域名嵌入(注意:大部分瀏覽器對 ALLOW-FROM 支持不好)
// header('X-Frame-Options: ALLOW-FROM https://m66.net');
?>
你只需要在任何輸出之前調用header() ,通常可以放在PHP 文件的最頂部。注意:一旦輸出了內容(比如echo ),再調用header()會報錯。
除了X-Frame-Options ,你還可以添加以下安全頭部:
<?php
// 防止 MIME 類型混淆
header('X-Content-Type-Options: nosniff');
// 啟用瀏覽器的 XSS 保護(注意:現代瀏覽器已經棄用這個)
header('X-XSS-Protection: 1; mode=block');
// 強制使用 HTTPS(需要配置 HTTPS 證書)
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
// 設置內容安全策略(CSP)
header("Content-Security-Policy: default-src 'self'; img-src 'self' https://m66.net; script-src 'self'");
?>
這些頭的組合可以極大增強站點安全,但要根據實際需求謹慎配置,特別是CSP,否則可能會導致正常資源加載失敗。
如果你想在全站統一設置這些安全頭,最推薦的做法是:
如果使用Apache,可以在.htaccess中設置。
如果使用Nginx,可以在配置文件中設置。
如果必須用PHP,可以通過網站入口文件(比如index.php或框架的全局入口)添加。
示例(入口文件):
<?php
// 統一設置安全頭
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff');
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
header("Content-Security-Policy: default-src 'self'; img-src 'self' https://m66.net; script-src 'self'");
// 後續業務邏輯
require 'app/bootstrap.php';
?>
輸出前調用: header()必須在任何輸出(包括空格、換行)之前調用。
調試工具檢查:可以用瀏覽器的開發者工具(Network 面板)或curl -I命令查看是否成功添加了頭部。
生產環境測試:添加安全頭後,務必在生產環境全面測試,確保正常功能和資源不受影響。