X-Frame-Options无法运行IIS web.config

时间:2014-08-14 20:11:36

标签: iis x-frame-options

我们的网站目前无法免遭点击劫持,所以我进入了 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. 为什么这不起作用?我可以做些什么来测试或前进?
  3. 我确实尝试将其添加到Application_Start方法中的 Global.asax 中,但我在调试时似乎无法“点击”此方法;它没有达到断点。

    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 http-equiv="X-Frame-Options" content="deny">
    

6 个答案:

答案 0 :(得分:18)

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

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

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

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

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

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

答案 1 :(得分:17)

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

要配置IIS以将X-Frame-Options标头添加到给定站点的所有响应,请按照下列步骤操作:

  1. 打开Internet信息服务(IIS)管理器。
  2. 在左侧的“连接”窗格中,展开“站点”文件夹,然后选择要保护的站点。
  3. 双击中间功能列表中的HTTP Response Headers图标。 enter image description here
  4. 在右侧的“操作”窗格中,单击“添加”。
  5. 在显示的对话框中,在“名称”字段中键入X-Frame-Options,然后在“值”字段中键入SAMEORIGINDENYenter image description here
  6. 单击“确定”保存更改。

答案 2 :(得分:10)

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

<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:内容安全策略下的值对您的网站而言是唯一的。

重要的内容是&#39; value =&#34; default-src:https:&#39;但最重要的是包含在内容安全策略中。