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

Moi*_*awk 18 iis x-frame-options

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

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="X-Frame-Options" value="DENY" />
        </customHeaders>
    </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

这是非常简单的代码.我的问题是它不起作用.我的问题是:

  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");
}
Run Code Online (Sandbox Code Playgroud)

我想补充一点,我已经尝试将其直接添加到head标签中,我也尝试将其添加到元标记中,如此

<meta http-equiv="X-Frame-Options" content="deny">
Run Code Online (Sandbox Code Playgroud)

小智 19

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"名称"字段,然后在"值"字段中键入SAMEORIGINDENY. 在此输入图像描述
  6. 单击"确定"保存更改.


siv*_*a.k 18

由于我的评论在这里回答了问题的最终结果:

出于某种原因设置X-Frame-Optionsweb.config似乎并没有实际工作,即使文档使它听起来应该是这样.

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

Response.AddHeader("X-Frame-Options", "DENY");
Run Code Online (Sandbox Code Playgroud)

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

protected void Application_BeginRequest()
{
    Response.AddHeader("X-Frame-Options", "DENY");
}
Run Code Online (Sandbox Code Playgroud)


ViR*_*iTy 12

答案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");
}
Run Code Online (Sandbox Code Playgroud)

SuppressXFrameOptionsHeader这里提到了这个标志:https://stackoverflow.com/a/20262211/3936440


Bri*_*ick 6

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Content-Security-Policy" value="default-src: https:; frame-ancestors 'self' X-Frame-Options: SAMEORIGIN" />
        </customHeaders>
    </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这是正确的方法,但是指令“frame-ancestors 'self';” 应该停在那里,用分号,而不是继续 X-Frame-Options,这在这个标头中是没有意义的。 (2认同)

Mar*_*cks 5

这是另一件事需要考虑:

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