PHP 怎么PHP X-Frame

wen PHP项目 2

本文目录导读:

PHP 怎么PHP X-Frame

  1. 使用 header() 函数(最简单)
  2. 在 .htaccess 文件中设置(Apache)
  3. 在 Nginx 配置中设置
  4. 全局设置(所有页面)
  5. 根据条件动态设置
  6. 在框架中的应用
  7. 重要提示

在 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');
});

重要提示

  1. 优先级DENY > SAMEORIGIN > ALLOW-FROM
  2. 版本兼容:现代浏览器已不支持 ALLOW-FROM,建议使用 Content-Security-Policyframe-ancestors 指令作为替代:
<?php
// 现代方法(支持 CSP)
header("Content-Security-Policy: frame-ancestors 'self' https://trusted.com");
// 兼容旧浏览器
header('X-Frame-Options: SAMEORIGIN');
?>
  1. 测试方法:可以使用以下代码测试是否生效:
<iframe src="http://your-site.com/page.php" width="300" height="300"></iframe>

如果页面未被嵌入,说明设置成功。

选择哪种方法取决于你的服务器配置和应用架构,推荐使用全局设置以确保所有页面都有安全保护。

抱歉,评论功能暂时关闭!