删除仅在“登录”页面中自动添加的X-Frame-Options

时间:2015-05-21 10:29:10

标签: c# asp.net asp.net-mvc iis iframe

我正在开发一个ASP.NET MVC应用程序,需要在另一个网站的iframe内加载。但登录页面不会显示在iframe内,因为正在回复X-Frame-Options中发送了一个标题,该标题设置为SAMEORIGIN。因此,浏览器未在iframe中显示该页面。我已经谷歌搜索并尝试了多项但没有任何效果。

我正在使用ASP.NET表单身份验证。可能在这种情况下,IIS在登录页面中添加此标头以增加安全性。但我需要在我的用例中摆脱这种情况。

我尝试添加自定义标题

<httpProtocol>
  <customHeaders>
    <add name="X-Frame-Options" value="ALLOW" />
  </customHeaders>
</httpProtocol>

SAMEORGIN仍在标题中添加逗号。

我还尝试使用Response.Headers["X-Frame-Options"] = "ALLOW"从C#添加标头值。它导致两个具有相同名称的标题。

我也在web.config

中尝试了这个
<customHeaders>
    <remove name="X-Frame-Options" />
</customHeaders>

它也没用。

2 个答案:

答案 0 :(得分:25)

MVC 5会自动添加一个X-Frame-Options标题,因此请转到Global.asax文件并将其添加到Application_Start()方法中:

System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;

请注意,特别是对于登录页面,删除此标头是不好的做法,因为它会打开您的网站以获取登录凭据网上诱骗攻击。因此,如果您的这个网站是公开可访问的,我强烈建议保留此标题。

答案 1 :(得分:8)

旧问题,但对于搜索类似问题的其他人,您可以使用以下解决方案删除特定操作中的X-Frame-Options

首先,将此代码添加到Application_Start中的方法Global.asax.cs(正如@Florian Haider所说):

System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;

这将取消所有操作中的标头。添加一个名为NoIframeAttribute.cs的新文件,其中包含以下代码:

using System.Web.Mvc;

namespace MyApplication
{
    public class NoIframeAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.HttpContext.Response.Headers.Set("X-Frame-Options", "SAMEORIGIN");
        }
    }
}

将以下行添加到RegisterGlobalFilters中的FilterConfig.cs方法:

filters.Add(new NoIframeAttribute());

现在,我们再次将标题添加到所有操作中。但现在我们可以在需要时将其删除。只需在需要的地方添加以下行:

Response.Headers.Remove("X-Frame-Options");