【问题标题】:Content-Security-Policy (CSP) workaround for internet explorerInternet Explorer 的内容安全策略 (CSP) 解决方法
【发布时间】:2016-02-19 16:15:43
【问题描述】:

我们正在建立一个ASP.NET 网站,并希望只允许某些域 可以iFrame 我们的网站。 Internet Explorer 不支持 CSP。我正在设置类似 Response.AddHeader("Content-Security-Policy", "frame-ancestors mydomain1.com mydomain2.com")。

每个人都如何处理 Internet Explorer。我读到 IE 支持X-Content-Security-Policy,但它没有frame-ancestors。

此外,我正在删除 IIS 添加的默认 X-Frame-Options 标头

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

【问题讨论】:

    标签: internet-explorer iframe content-security-policy


    【解决方案1】:

    Microsoft推荐的解决方案如下:

    1. 在内部,将 domain1.com 和 domain2.com 列入白名单
    2. 嵌入 iframe 网址时,请在网址中添加一个参数来指定来源:iframe src="http://example.org/frame.html?origin=http://domain1.com"
    3. 在您的服务器上,检查原始值是否已列入白名单。用它来设置 X-Frame-Options: ALLOW-FROM http://domain1.com

    您还可以检查Referer 标头是否存在。

    【讨论】:

    • 朱利安:谢谢我也做了。
    • 如果我将该 iframe 和列入白名单的参数复制到其他网站会怎样?
    【解决方案2】:

    X-Frame-Options 正在被 Content-Security-Policy 取代,但正如您所说,并非所有浏览器都完全支持 Content-Security-Policy。

    您说您有意删除 X-Frame-Options,但您不应该这样做。 Internet Explorer 支持这一点,因此如果您在 Content-Security-Policy 之外使用它,您将在更广泛的浏览器中获得相同的效果。

    请参阅此处的 X-Frame-Options 文档,其中提到了 IE 支持: https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options

    【讨论】:

      【解决方案3】:

      Internet Explorer 8 到 11 仅支持 X-Frame-Options,您可以使用 ALLOW-FROM 值。在此处指定 iframe 的 URL。

      请记住,只有最新的 Internet Explorer 浏览器支持 X-Content-Security-Policy。

      【讨论】:

      • 根据 RFC,X-Frame-Options 只允许 1 个 URL: ALLOW-FROM:“不允许在一个 ALLOW-FROM 语句中使用通配符或列表声明多个域”。跨度>
      【解决方案4】:

      X-Content-Security-Policy 适用于 IE,使用 https://content-security-policy.com/browser-test/ 测试浏览器是否支持 csp

      express 中的代码段如下所示:

      function applyCSPforIE(req, res, next) {
          res.setHeader('X-Content-Security-Policy', 'frame-ancestors \'self\' http://whatever.com/');
          next();
      }
      

      您可以同时使用这两种方法,它可以工作,但在 article 上有一个警告。

      【讨论】:

        【解决方案5】:

        以下 apache 配置适用于所有主流浏览器(2018 年 4 月):

        <IfModule mod_headers.c>
        
            Header set Content-Security-Policy "frame-ancestors http://*.example.com/ 'self';"
        
            # For IE 11 and below
            Header set X-Frame-Options SAMEORIGIN
            Header append X-Frame-Options "ALLOW-FROM http://example.com/" </IfModule>
        

        【讨论】:

        • X-Frame-Options 不允许多个值,因此第二个“附加”行将创建无效标题或具有未定义的效果。
        猜你喜欢
        • 1970-01-01
        • 2021-12-26
        • 2023-01-07
        • 1970-01-01
        • 2016-03-25
        • 2013-10-09
        • 2015-07-28
        • 1970-01-01
        • 2017-08-13
        相关资源
        最近更新 更多