我正在开发一个用户登录系统,我想出了一个解决方案,我想通过你们这些好人来确保我不会造成巨大的安全漏洞。
这就是我们所拥有的。
您从一个 HTTP 页面开始,当您单击一个链接时将打开一个模式窗口。单击来自 HTTP 页面的第一个链接将使用链接到 HTTPS 页面的 iFrame 重新填充模式。由于我无法让 HTTPS 与 HTTP 页面通信,因此我在 HTTPS iframe 页面上使用 document.location
设置来使成功页面成为 HTTP。然后 HTTP 页面与父窗口对话。
所以:
HTTP(单击)-> 在 HTTPS 中打开 iFrame -> 成功时通过 HTTPS 安全登录 document.location
-> HTTP 成功页面 -> window.parent.success_msg(deferred);
调用父窗口。
到目前为止它在所有浏览器中都运行良好...还没有测试 IE,但我想在展示它之前验证这不是一个非常糟糕的做法。
谢谢!
最佳答案
iframe
到 HTTP 页面中的 HTTPS URL 是非常糟糕的做法,因为它使用户很难获得有关该页面的更多详细信息(特别是与安全相关的信息)。 (当然,您可能可以右键单击并找到一种方法来检查 iframe
的属性,但即使是知道如何做的用户也可能不会这样做)。
使用像这样的 HTTPS iframe
,您可以防止浏览器显示常用的安全符号:锁、绿色/蓝色条,更重要的是,站点地址(攻击者可以将他们自己的链接到他们的 www.some-other-site.example
而不是缩进的网站; www.some-other-site.example
可以有一个合法的证书和浏览器不会给出任何警告消息)。
这种做法对于通过 HTTP 服务的页面中的 HTTPS iframe
尤其糟糕,但当包含页面通过 HTTPS 服务时,这种做法也不好。您也无法轻松验证为框架页面提供服务的服务器的身份。 (遗憾的是,这是(或至少是)3-D Secure 推荐的内容 ...)
如果您想通过 HTTPS 进行身份验证,请通过提供非安全 cookie 将整个页面切换到 HTTPS,然后再切换回来。当然,这不是很安全(有人可以拦截该安全 token ,正如 FireSheep 所推广的那样),但这至少更好,用户将能够检查他们输入凭据的页面是否合法一。 (这也应该小心完成,参见 this question。)
如果可以的话,最好的方法是在身份验证后继续使用没有 iframe 的 HTTPS。
关于JavaScript HTTPS 到 HTTP iFrame 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6521523/