防止點擊劫持,需設置響應頭 X-Frame-Options 或現代 Content-Security-Policy: frame-ancestors。
| 值 | 行為 | 適用場景 |
|---|---|---|
DENY | 完全禁止嵌入 | 高安全頁面(登錄、支付、後台) |
SAMEORIGIN | 僅允許同源嵌入 | 大多數業務頁面(推薦默認) |
ALLOW-FROM https://example.com | 允許指定域嵌入(已棄用,瀏覽器支援度低) | 跨域嵌入需求(改用 CSP) |
<?php
// 必須在任何輸出前
header('X-Frame-Options: SAMEORIGIN');
// 現代 CSP 替代(支援多域、更靈活)
header("Content-Security-Policy: frame-ancestors 'self' https://trusted.partner.com;");
# 全站
add_header X-Frame-Options SAMEORIGIN always;
# 或特定 location
location /admin/ {
add_header X-Frame-Options DENY always;
add_header Content-Security-Policy "frame-ancestors 'none';" always;
}
mod_headers)# .htaccess 或 httpd.conf
Header always set X-Frame-Options SAMEORIGIN
Header always set Content-Security-Policy "frame-ancestors 'self';"
curl -I https://example.com/page
# 應包含
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
Refused to display in a frame because X-Frame-Options set to SAMEORIGIN,iframe 顯示空白或瀏覽器默認錯誤頁。X-Frame-Options 不支援多域,ALLOW-FROM 已被 Chrome/Firefox/Edge 棄用。X-Frame-Options: SAMEORIGIN(舊瀏覽器兼容)+ CSP: frame-ancestors 'self' ...(現代標準)。FrameGuard 或 spatie/laravel-csp。NelmioSecurityBundle 配置 frame_ancestors。MY_Controller 構造函數 header('X-Frame-Options: SAMEORIGIN');。default_header 或行為擴展。