我们的网站目前无法安全地进行点击劫持,所以我进入了web.config并添加了
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="DENY" />
</customHeaders>
</httpProtocol>
</system.webServer>
这是非常简单的代码。我的问题是它不起作用。我的问题是:
X-Frame-Options
是否在标题响应中?我用httpfox找了它并没有得到任何东西,所以我无法验证web.config
是否真的把东西放在标题中。我确实尝试在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">
由于我的评论在这里回答了问题的最终结果:
出于某种原因,在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");
}
X-Frame-Options标头可用于控制是否可以将页面放在IFRAME中。由于Framesniffing技术依赖于能够将受害者站点放置在IFRAME中,因此Web应用程序可以通过发送适当的X-Frame-Options标头来保护自己。
若要配置IIS以将X-Frame-Options标头添加到给定站点的所有响应,请按照下列步骤操作:
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
这是另一件需要考虑的事情:
如果您有单独的后端和UI项目(这对于基于REST的站点非常常见),请确保将X-Frame-Options放在UI web.config中。您的API可能允许跨站点调用,因此向API项目添加标头是没有意义的。
我发现一些文件类型(.asp和.htm文件)正在通过此机制添加X-Frame-Options标头,而其他(.js)则没有。使用IIS Admin实用程序,我从应用程序级别删除了标头,并在服务器级别添加了标头,然后所有文件都添加了标头。
<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:'之后的内容,但最重要的是包含在内容安全策略中。