我想通过 iframe 控制限制我的网站内容在其他域中使用。推荐的元标记即<meta http-equiv="X-Frame-Options" content="deny">
不起作用。我能做些什么?
5 回答
您不能在元标记中设置 X-Frame-Options,只能使用 HTTP 标头。
在这里阅读更多:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
例如,如果您使用的是 Apache,您应该在 .htaccess 文件中添加这样的一行
Header set X-Frame-Options DENY
只需在标题中使用它,100% 工作
<?php header( 'X-Frame-Options: DENY' ); ?>
避免在元标记中这样做。在 IIS 或应用程序中执行此操作:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("x-frame-options", "DENY");
}
或者
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
如果要允许特定域,请使用 allow-from 选项而不是拒绝。
此标头可能不适用于旧浏览器,例如 Mozilla 3.0,因此您还需要实现客户端验证,名为 busting JS。在这里检查:https ://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet
如果您需要在响应中添加标头,请考虑在标头即将发送时注册回调以执行此操作。
在 BeginRequest 和发送的响应之间,代码可以完全替换或清除 headers 集合(尽管可能不是,如果您自己编写了所有代码)。
在此示例中,我有一些下游代码,有时会添加x-frame-options
标题,但会丢失一些 HTML 页面。因此代码确保在回调中设置标头:
protected void Application_BeginRequest()
{
HttpContext.Current.Response.AddOnSendingHeaders(httpContext =>
{
if (isHtmlResponse() && hasNoFrameOptionsHeader())
{
httpContext.Response.AddHeader("x-frame-options", "SAMEORIGIN");
}
bool isHtmlResponse () {
var contentTypeValue = httpContext.Response.Headers["content-type"];
return contentTypeValue is null ? false : contentTypeValue.ToLower().Contains("text/html");
}
bool hasNoFrameOptionsHeader () => httpContext.Response.Headers["x-frame-options"] is null;
});
}
不起作用。浏览器错误:X-Frame-Options 只能通过随文档一起发送的 HTTP 标头来设置。里面可能没有设置。
注意:设置元标记是没有用的!例如,没有效果。不要使用它!只有通过像下面的示例那样通过 HTTP 标头进行设置,X-Frame-Options 才会起作用。
来源链接
配置阿帕奇:
Header set X-Frame-Options "deny"
Header always set X-Frame-Options "sameorigin"
配置nginx:
add_header X-Frame-Options sameorigin always;
配置 IIS:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="sameorigin" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
X-Frame-Options是一种针对点击劫持攻击的缓解技术。它是服务器发送的 HTTP 响应标头,用于指示在什么情况下页面内容应显示在框架上下文中。如果违反了 header 指令,理解 header 的浏览器将不会显示页面的内容(例如,如果 evil-example.com 将 good-site.com 放在 iframe 中,但 good-site.com 发送的 header 显示X-Frame-Options: DENY。因此,不会发生点击劫持,因为没有 UI 元素可以显示给受害者。它不提供针对 CSRF 的保护。阅读更多:点击劫持和 ..,通过 HTTP 响应的安全性