X-Frame-Options在元标记中不起作用?

时间:2017-08-02 07:36:10

标签: html x-frame-options metatag http-equiv

我想通过iframe控件限制我的网站内容在其他域中使用。推荐的元标记即<meta http-equiv="X-Frame-Options" content="deny">不起作用。我该怎么办?

5 个答案:

答案 0 :(得分:1)

您不能仅使用HTTP标头在元标记中设置X-Frame-Options。

在这里阅读更多内容:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

例如,如果您使用的是Apache,则应在.htaccess文件中添加如下所示的行

Header set X-Frame-Options DENY

答案 1 :(得分:0)

避免在元标记中执行此操作。在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,因此您还需要实现客户端验证,名为破坏JS。在此处查看:https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet

答案 2 :(得分:0)

它不起作用。浏览器错误:X-Frame-Options只能通过与文档一起发送的HTTP标头进行设置。可能没有设置在里面。

  

注意:设置meta标签是没有用的!例如,没有任何作用。不要使用它!只有通过像下面的示例一样通过HTTP标头进行设置,X-Frame-Options才能起作用。

来源Link

配置Apache:

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响应标头,用于指示在何种情况下应在框架上下文中显示页面内容。如果标头指令被违反,则了解标头的浏览器将不会显示页面的内容(例如,如果evil-example.com将good-site.com放在iframe中,但是good-site.com发送的标头显示为X-Frame-Options:DENY。因此,不会发生点击劫持,因为无法向受害者显示任何UI元素。 它不提供针对CSRF的保护。了解更多:clickjacking and ..Security through HTTP response

答案 3 :(得分:0)

如果您需要在响应中添加标头,请考虑在要发送标头时注册回调以执行此操作。

在BeginRequest和发送的响应之间,代码可以完全替换或清除标头集合(尽管如果您自己编写了所有代码,则可能没有)。

在此示例中,我有一些下游代码,有时会添加一个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;
    });            
} 

答案 4 :(得分:-1)

您也可以尝试php代码

npm install -D @types/prop-types@ts2.4