如何抑制 X-Frame-Options SAMEORIGIN 响应标头?

Posted

技术标签:

【中文标题】如何抑制 X-Frame-Options SAMEORIGIN 响应标头?【英文标题】:How to suppress X-Frame-Options SAMEORIGIN response header? 【发布时间】:2019-10-19 10:27:43 【问题描述】:

我正在尝试删除 X-Frame-Options SAMEORIGIN 标头或将其设置为 ALLOWALL

我已经在我的web.config 中设置了它,并且在我的 IIS 的网站 Http 响应标头中设置了它,但我仍然在我的浏览器中收到 X-Frame-Options SAMEORIGIN 并且 iframe 内容没有呈现。

<httpProtocol>
  <customHeaders>
    <remove name="X-Powered-By" />
    <add name="Cache-Control" value="public" />
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="X-Frame-Options" value="ALLOWALL" />
  </customHeaders>
</httpProtocol>

在 Firefox 和 Chrome 中是一样的。

还有其他地方我应该寻找或可以修改它吗?

【问题讨论】:

【参考方案1】:

转到 Global.asax.cs 中的Application_Start() 并添加此行

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

请注意,这意味着任何人都可以在 iframe 中使用您的应用程序。所以用这段代码添加一个新文件是值得的:

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());

现在它已安全返回到您的应用程序中,您可以在应用程序中的任何需要删除 xframeoptions 的地方使用

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

【讨论】:

以上是关于如何抑制 X-Frame-Options SAMEORIGIN 响应标头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 项目中设置 X-Frame-Options?

Content-Security-Policy 如何与 X-Frame-Options 一起使用?

如何在 express.js node.js 中设置 X-Frame-Options

如何在 nginx 中正确设置 X-Frame-Options Allow-From

如何在 Django 中配置 X-Frame-Options 以允许 iframe 嵌入一个视图?

如何在 Rails 4 中覆盖控制器或动作的 X-Frame-Options