在SSL下显示来自同一域的IFrame

时间:2015-06-10 04:01:51

标签: c# .net ssl iframe

我正在尝试将页面的登录部分包含在使用SSL创建的iframe中,并在我们公司网站的几个页面上显示(有点像登录小部件)。

但是,我一直在页面上出现错误,呈现iframe表示:

  

拒绝在框架中显示,因为它设置了X-Frame-Options'到' SAMEORIGIN' .`

我要在其上显示的登录窗口小部件和网页是在同一个域下托管的,这是一个问题吗?

我已经四处寻找,似乎没有什么能够避免这个问题。有没有人有解决这个问题的方法?

<iframe sandbox="allow-same-origin allow-forms allow-scripts" src="https://<sitename>/loginiframewidget.aspx"></iframe>

目前这些是我在web.config中的内容

<httpProtocol>
  <customHeaders>
    <add name="access-control-allow-headers" value="content-type" />
    <!--<add name="Access-Control-Allow-Origin" value="*" />-->
    <add name="Content-Security-Policy" value="frame-ancestors 'self' mysite.com.au"/>
    <add name="X-Frame-Options" value="ALLOWALL"/>
  </customHeaders>
</httpProtocol>

页面上Chrome Dev Tools中显示的标题是:

enter image description here

3 个答案:

答案 0 :(得分:5)

无论如何,此实现存在安全问题。

首先,您无法确定未加密页面的内容在传输时是否未被更改,并且已将iframe的src指向其他位置。

第二个是,即使用户使用SSL登录,他们在cookie中的会话ID也会以明文形式发送,并且很容易被欺骗。

您会考虑在SSL中运行整个网站吗?这些天服务器比你想象的更好地处理这个问题,你不再需要iframe了。

答案 1 :(得分:1)

尝试设置frame-ancestors标头的Content-Security-Policy指令,以及旧版IE的X-Frame-Option标头。

http://caniuse.com/#feat=contentsecuritypolicy

您可以通过IIS添加这些内容,或将它们添加到您的web.config文件中:

<system.webServer>
  ...    
  <httpProtocol>
    <customHeaders>
      <add name="Content-Security-Policy" value="frame-ancestors 'self' mywebsite.com" />
      <add name="X-Frame-Options" value="ALLOW-FROM http://mywebsite.com" />
    </customHeaders>
  </httpProtocol>    
  ...
</system.webServer>

现在应将标题发送到浏览器:

enter image description here

答案 2 :(得分:1)

没有意义重大不,你不能这样做,你无法在非SSL页面上访问SSL资源,你的客户是否愿意在互联网上公开所有内容?允许框架选项仍然不起作用,因为浏览器不允许您跨越SSL边界。

HTTP根本不安全,这就是为什么谷歌中的每个网站现在都在SSL下,因为非SSL内容可以被ISP和防火墙更改,实际上ISP,防火墙和其他路由器不断在页面上注入脚本监控流量。

向您的客户解释,今天在非HTTPS下运行经过身份验证的会话等同于锁定主页的门,但是打开所有窗口!!!。

保持活跃,SSL协商只会发生一次,性能可以忽略不计,您可以通过将CDN外包给CloudFront或任何其他带有子域SSL的CDN来提高网站速度。

OAuth - 但建议仅在SSL下使用

您可以实施自己的OAuth提供程序,并使用它来分发OAuth令牌,这些令牌可用于在服务器端的网站中进行验证。您的网站可以使用OAuth提供商发布的辅助令牌来验证用户,您可以将用户重定向到可以在SSL下运行的OAuth提供商。这样,您可以允许用户在非SSL页面上进行身份验证时执行有限的非安全事务。就像你可以在非SSL网站下使用Facebook / Google登录等一样。