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

Removing X-Frame-Options being added automatically only in Login page

我正在开发一个 ASP.NET MVC 应用程序,它需要加载到另一个网站的 iframe 中。但是登录页面不会出现在 iframe 中,因为 Header 在响应 X-Frame-Options 中被发送,它被设置为 SAMEORIGIN。因此,浏览器未显示 iframe 中的页面。我已经用谷歌搜索并尝试了很多东西,但没有任何效果。

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

我尝试添加自定义 header

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

但是SAMEORGIN还在header中加了逗号

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

我也在web.config

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

也没用。

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

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

请注意,特别是对于登录页面,删除此 header 是一种不好的做法,因为它会打开您的站点以进行登录凭据网络钓鱼攻击。因此,如果您的这个站点可以公开访问,我强烈建议保留此 header。

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

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

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

这将抑制所有操作中的header。添加一个名为 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");
        }
    }
}

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

filters.Add(new NoIframeAttribute());

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

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