本文目录导读:

在 PHP 中设置 X-Frame-Options 头来防止点击劫持攻击,主要有以下几种方法:
使用 header() 函数(最简单)
在 PHP 页面顶部添加:
<?php
// 禁止所有页面被嵌入 iframe
header('X-Frame-Options: DENY');
// 或者只允许同源页面嵌入
header('X-Frame-Options: SAMEORIGIN');
?>
在 .htaccess 文件中设置(Apache)
# 禁止所有页面被嵌入 Header always set X-Frame-Options "DENY" # 或只允许同源 Header always set X-Frame-Options "SAMEORIGIN"
在 Nginx 配置中设置
add_header X-Frame-Options "SAMEORIGIN" always;
全局设置(所有页面)
在公共入口文件(如 index.php)或配置文件中设置:
<?php
// config.php 或公共函数中
function setSecurityHeaders() {
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff');
header('X-XSS-Protection: 1; mode=block');
header('Referrer-Policy: strict-origin-when-cross-origin');
}
// 在所有页面加载前调用
setSecurityHeaders();
?>
根据条件动态设置
<?php
// 允许特定域名嵌入
$allowed_domains = ['example.com', 'trusted-site.com'];
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (empty($referer) || strpos($referer, 'same-origin') !== false) {
header('X-Frame-Options: SAMEORIGIN');
} else {
header('X-Frame-Options: DENY');
}
?>
在框架中的应用
Laravel:
// 在中间件中设置
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('X-Frame-Options', 'SAMEORIGIN');
return $response;
}
WordPress:
// 在 functions.php 中添加
add_action('send_headers', function() {
header('X-Frame-Options: SAMEORIGIN');
});
重要提示
- 优先级:
DENY>SAMEORIGIN>ALLOW-FROM - 版本兼容:现代浏览器已不支持
ALLOW-FROM,建议使用Content-Security-Policy的frame-ancestors指令作为替代:
<?php
// 现代方法(支持 CSP)
header("Content-Security-Policy: frame-ancestors 'self' https://trusted.com");
// 兼容旧浏览器
header('X-Frame-Options: SAMEORIGIN');
?>
- 测试方法:可以使用以下代码测试是否生效:
<iframe src="http://your-site.com/page.php" width="300" height="300"></iframe>
如果页面未被嵌入,说明设置成功。
选择哪种方法取决于你的服务器配置和应用架构,推荐使用全局设置以确保所有页面都有安全保护。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播