当前位置: 首页> 最新文章列表> 用 header() 限制 iframe 加载当前页面(Clickjacking 防护)

用 header() 限制 iframe 加载当前页面(Clickjacking 防护)

M66 2025-05-28

Clickjacking 是一种恶意技术,通过将网页嵌入到透明的 iframe 中,用户在不知情的情况下,点击了攻击者所控制的网页上的某些内容。为了防止这种攻击,我们可以通过 HTTP 头部(header)信息来阻止页面被嵌套到 iframe 中。

在 PHP 中,我们可以使用 header() 函数来设置合适的 HTTP 响应头,从而实现防御。

什么是 Clickjacking 攻击?

Clickjacking 攻击的原理是通过欺骗用户点击他们看不见的界面元素,使用户在不知情的情况下执行操作。通常攻击者会使用 iframe 将目标网站的页面嵌套在自己的网页中,通过透明度或其他手段遮掩页面内容,让用户在操作看似无害的内容时,其实是在执行攻击者想要的操作。

如何防止 iframe 加载当前页面?

防止页面被嵌套到 iframe 中的最佳方式是使用 X-Frame-Options 响应头。这个头部告诉浏览器当前页面是否允许被嵌套在 iframe 中,使用该方法可以有效防止 Clickjacking 攻击。

使用 header() 函数设置 X-Frame-Options

在 PHP 中,你可以通过 header() 函数发送 HTTP 响应头。要防止页面被嵌套到 iframe 中,可以使用以下代码:

<?php
// 设置 X-Frame-Options 防止页面被嵌套在 iframe 中
header('X-Frame-Options: DENY');

// 或者如果你希望只允许在指定域名下嵌套页面,可以使用:
header('X-Frame-Options: ALLOW-FROM https://m66.net');

// 继续处理页面的其他内容
?>

X-Frame-Options 的值

  • DENY:禁止任何网页通过 iframe 加载当前页面。

  • SAMEORIGIN:只允许同一来源(即相同域名)的页面通过 iframe 加载当前页面。

  • ALLOW-FROM uri:允许指定的域名通过 iframe 加载当前页面。请注意,ALLOW-FROM 选项在某些浏览器中(如 Firefox)已被废弃,因此通常推荐使用 DENYSAMEORIGIN

示例:防止 iframe 嵌套

以下是一个实际示例,展示了如何在 PHP 页面中设置 X-Frame-Options 头部,以防止其他站点将当前页面嵌套到 iframe 中:

<?php
// 防止 Clickjacking 攻击
header('X-Frame-Options: DENY');

// 设置其他 HTTP 响应头部
header('Content-Type: text/html; charset=UTF-8');

// 页面内容
echo "<h1>这是一个安全的页面</h1>";
echo "<p>该页面无法被嵌套在 iframe 中。</p>";
?>

其他防御措施

虽然 X-Frame-Options 是防止 Clickjacking 攻击的有效方法,但它并不是唯一的防御措施。你还可以使用 Content Security Policy (CSP) 来进一步加强防护。例如,通过设置 CSP 头部,明确禁止页面被嵌套在 iframe 中:

<?php
// 使用 CSP 禁止嵌套
header("Content-Security-Policy: frame-ancestors 'none';");

// 页面内容
echo "<h1>这是一个安全的页面</h1>";
?>

通过将 frame-ancestors 设置为 'none',你可以完全禁止页面被嵌套在任何 iframe 中,这种方法比 X-Frame-Options 更具灵活性。

这样就可以有效地防止你的页面被嵌套在 iframe 中,避免 Clickjacking 攻击。根据你的需求,可以选择使用 X-Frame-Options 或者 Content Security Policy(CSP)来实现防御。