默认情况下,我的网站具有x-frame-options:启用了SAMEORIGIN标头。我想将其从特定视图中删除,以便只允许该视图托管在第三方iFrame中。
public ActionResult Callback1()
{
// Remove the anti-clickjacking setting
Response.Headers.Remove("X-Frame-Options");
Return View();
}
// Does not remove the header
public ActionResult Callback2()
{
// Try to override the setting
Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://foo.com"
Return View();
}
// Results in x-frame-options: ALLOW-FROM https://foo.com, SAMEORIGIN
任何帮助都将不胜感激。
答案 0 :(得分:4)
如果您通过在web.config中的customHeader
元素下添加system.webServer
来启用X-Frame-Options标题,则在您的操作方法中删除此标题将无法正常工作。因为即使您的代码从响应中删除了标头,IIS也会在将响应返回给浏览器之前将其添加回来。
这方面的一个解决方案是创建一个自定义HttpModule,它检查网址并从特定网页中删除此标头。您可以将此模块注入请求管道。
另一种更简单的方法是从web.config中删除该设置并启用在代码中添加标头。您可以创建一个动作过滤器来执行此操作。
public class EnableSameOriginHeader : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
base.OnActionExecuted(filterContext);
}
}
对于所有这些操作方法,您希望启用此标头,只需使用此过滤器进行装饰即可。
[EnableSameOriginHeader]
public ActionResult Users()
{
return View();
}
如果您不想启用此功能,请不要使用此过滤器进行装饰,并在其中添加自定义标头值。
public ActionResult SpecialView()
{
Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://foo.com";
return View();
}