27

我们的网站目前无法避免点击劫持,所以我进入了web.config并添加了

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="X-Frame-Options" value="DENY" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

这是非常直接的代码。我的问题是它不起作用。我的问题是:

  1. 有没有办法让我查看是否X-Frame-Options在标头响应中?我用 httpfox 寻找它并没有得到任何东西,所以我无法验证它web.config是否真的将东西放在标题中。
  2. 为什么这不起作用?我可以做些什么来测试或继续前进?

我确实尝试将它添加到方法中的Global.asaxApplication_Start,但是当我调试时我似乎无法“命中”这个方法;它没有达到断点。

private void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    HttpContext.Current.Response.AddHeader("x-frame-options", "DENY");

    LogHelper.Info("Cost of Care Web Application Starting");
}

我想补充一点,我已尝试将其直接添加到 head 标签中,并且我也尝试将其添加到 meta 标签中,如下所示

<meta http-equiv="X-Frame-Options" content="deny">
4

6 回答 6

28

X-Frame-Options 标头可用于控制是否可以将页面放置在 IFRAME 中。因为 Framesniffing 技术依赖于能够将受害站点放置在 IFRAME 中,所以 Web 应用程序可以通过发送适当的 X-Frame-Options 标头来保护自己。

要配置 IIS 以将 X-Frame-Options 标头添加到给定站点的所有响应中,请执行以下步骤:

  1. 打开 Internet 信息服务 (IIS) 管理器。
  2. 在左侧的“连接”窗格中,展开“站点”文件夹并选择要保护的站点。
  3. 双击HTTP Response Headers中间功能列表中的图标。 在此处输入图像描述
  4. 在右侧的“操作”窗格中,单击“添加”。
  5. 在出现的对话框中,X-Frame-Options在名称字段中键入,然后在值字段中 键入SAMEORIGIN或。DENY在此处输入图像描述
  6. 单击确定以保存您的更改。
于 2016-03-15T13:16:46.810 回答
24

由于我的评论回答了这个问题,因此这是最终结果:

出于某种原因,X-Frame-Options在 web.config 中设置似乎并没有真正起作用,即使文档听起来应该如此。

一个简单的解决方法是使用以下方法手动设置标题:

Response.AddHeader("X-Frame-Options", "DENY");

如果您对每个请求都需要此设置,没有例外,您可以将其添加Application_BeginRequest到 Global.asax:

protected void Application_BeginRequest()
{
    Response.AddHeader("X-Frame-Options", "DENY");
}
于 2014-08-17T20:06:18.627 回答
14

的答案siva.k不适用于 MVC5,因为标头在此处生成了两次。以下代码应该可以工作:

protected void Application_Start()
{
  //  MVC5 generates the "X-Frame-Options SAMEORIGIN" header by default, the following line disables the default behaviour
  System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
}

protected void Application_BeginRequest() 
{
  Response.AddHeader("X-Frame-Options", "DENY");
}

此处提到了该SuppressXFrameOptionsHeader标志:https ://stackoverflow.com/a/20262211/3936440

于 2015-03-03T12:36:59.553 回答
8
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Content-Security-Policy" value="default-src: https:; frame-ancestors 'self' X-Frame-Options: SAMEORIGIN" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

您的 web.config 条目需要在内容安全策略下才能使用以前未折旧的当前编码。内容安全政策下的价值value="default-src: https:对您的网站来说是独一无二的。

重要的内容是 'value="default-src: https:' 之后的内容,但最重要的是包含在内容安全策略中。

于 2017-12-22T21:01:26.393 回答
5

这是另一件需要考虑的事情:

如果您有单独的后端和 UI 项目(这在基于 REST 的站点中很常见),请确保将 X-Frame-Options 放在 UI web.config 中。您的 API 可能允许跨站点调用,因此将标头添加到您的 API 项目是没有意义的。

于 2015-09-21T07:53:05.420 回答
2

我发现某些文件类型(.asp 和 .htm 文件)正在获取由该机制添加的 X-Frame-Options 标头,而其他(.js)则没有。使用 IIS Admin 实用程序,我从应用程序级别删除了标头并将其添加到服务器级别,然后所有文件都添加了标头。

于 2016-11-30T20:16:57.790 回答