删除仅在登录页面中自动添加的 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");
我正在开发一个 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");