當前位置: 首頁> 最新文章列表> 怎麼用PHP 的header() 函數設置像X-Frame-Options 這樣的安全HTTP 頭?

怎麼用PHP 的header() 函數設置像X-Frame-Options 這樣的安全HTTP 頭?

M66 2025-07-18

在現代web 開發中,確保網站的安全性是開發者的重要職責。瀏覽器提供了許多機制,可以通過設置特定的HTTP 頭(HTTP Headers)來增強網站的安全性,例如X-Frame-OptionsX-Content-Type-OptionsStrict-Transport-Security等。這些HTTP 頭可以幫助防止點擊劫持、MIME 類型混淆、跨站點腳本(XSS)等攻擊。

在PHP 中,設置HTTP 頭最常用的方式就是使用header()函數。本文將詳細介紹如何用PHP 的header()函數設置X-Frame-Options以及其他常見的安全HTTP 頭。

1. 使用header()設置X-Frame-Options

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()會報錯。

2. 添加其他安全HTTP 頭

除了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,否則可能會導致正常資源加載失敗。

3. 在全站統一設置頭部

如果你想在全站統一設置這些安全頭,最推薦的做法是:

  • 如果使用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';
?>

4. 注意事項

  • 輸出前調用header()必須在任何輸出(包括空格、換行)之前調用。

  • 調試工具檢查:可以用瀏覽器的開發者工具(Network 面板)或curl -I命令查看是否成功添加了頭部。

  • 生產環境測試:添加安全頭後,務必在生產環境全面測試,確保正常功能和資源不受影響。