添加 Xframeoptions 后不会发生跨域通信:Sameorigin

Cross domain communication is not happening after adding Xframeoptions : Sameorigin

我正在努力为我们的网站实施预防点击劫持。我首先添加 header X-Frame-Options : sameorigin.有了这个我们的网站无法加载到任何其他网站托管的任何 iframe 中,因此点击劫持部分工作正常。

现在的问题是,我们有几个页面使用 iframe 加载托管形式的支付网关,这些网关使用 iframeCommunicator Url 选项进行跨域通信。添加 X-Frame-Options header 后,托管表单未与支付网关通信。

我在控制台中遇到以下错误: 拒绝在框架中显示“http://localhost:44352/examplesite/payment/iFrameCommunicator#action=resizeWindow&width=1106&height=152”,因为它将 'X-Frame-Options' 设置为 'sameorigin'。

上面的错误来自 header 我在 webconfig 中设置如下

<httpProtocol>
  <customHeaders>
      <add name="X-FRAME-OPTIONS" value="SAMEORIGIN" />
  </customHeaders>
</httpProtocol>

我尝试过的其他设置:

<add name="X-Content-Security-Policy" value="frame-ancestors 'self' *.example.net*" /> 

<add name="Content-Security-Policy" value="frame-ancestors 'self' *.example.net*" />

其中 .example.net 是用于获取托管表单的支付网关 url。

正在考虑...

  • 您想要拒绝您的网站被其他人使用 iframe,但允许 iframe 提供来自你自己的网站:

    <add name="Content-Security-Policy" value="frame-ancestors 'self';" />

    与旧的X-Frame-Options具有相同的效果 header:

    <add name="X-Frame-Options" value="sameorigin" />

  • 并且您想要允许包含支付网关页面的 iframe:

    <add name="Content-Security-Policy" value="frame-src *.example.net;" />

因此您需要同时设置 HTTP headers。请注意,HTTP header 仅添加到您的页面,而不添加到支付提供商页面,它们由另一台服务器提供。

然而...

这无法解释为什么您无法通过将 X-FRAME-OPTIONS header 设置为 allow sameorigin 来在 iframe 中提供来自支付网关的内容,正如您之前所述。