2010-03-16 41 views
9

我有一个来自客户端的请求,希望他们现有的其中一个表单存在于另一个网站上。iframe非SSL网站上的SSL安全表单

他们希望在iframe中有付款表单。

如果在支付处理过程中将SSL网站设置为非SSL网站,会有什么影响?

+1

@Kevin:欢迎来到StackOverflow :)下面是可能指向一些需要考虑的事项的相关问题:http://stackoverflow.com/questions/2356080/ssl-login-in-iframe – 2010-03-16 20:43:33

回答

5

你的用户的浏览器会给他们安全警告,基本上说这是一个不安全的场景。例如,中间人攻击可能会将JavaScript注入到您的非SSL页面中,现在您可能已被泄露。

在这种情况下,弹出页面或平面页面重定向是执行此操作的适当方式。正如您可能非常了解的那样,您希望浏览器中的100%内容能够通过SSL托管在这种场景中。否则,你根本不能保证受到保护。这是警告的原因。

+0

这就是我的想法。我刚才告诉我们,SSL也可以保护第二个站点。这应该让我们摆脱不安全的内容警告。谢谢。 – Kevin 2010-03-16 20:44:10

6

现代网络浏览器不会给出任何安全警告,因为父窗口通过HTTP运行不安全。尽管如此,您的Web浏览器不会在地址栏中显示安全的锁图标,因为安全内容位于子窗口(iframe)内部,因此您的用户可能会害怕该表单可能不安全。

由于所有网络浏览器(经典的& modern)都拒绝通过Javascript访问iframe内容,因为iframe使用不同的协议和/或域名,所以不太可能发生中间人攻击。此时与iframe通信的唯一方法是通过现代Web浏览器中实现的postMessage函数,该函数允许通过Javascript进行跨域通信。即使您使用的是postMessage,iframe也需要包含侦听来自父窗口的postMessage事件的代码,在iframe中开发付款表单的情况下,只有父窗口需要在事件发生后侦听事件付款已处理。因此,如果通过postMessage单向保持通信(iframe仅执行postMessage,而父节点侦听消息),则中间人攻击很可能不会发生。

当然,任何人都可以重写事件监听器并在父窗口上执行代码,欺骗服务器认为已经处理了付款。那就是当你需要在你的服务器端代码中采取预防措施来检查确认事务确实发生了合法。就我而言,我的付款单(iframe)在数据库中创建一个临时密钥,并通过postMessage将该密钥发送到父窗口。然后,父窗口对服务器进行AJAX调用,检查数据库以查看密钥是否匹配,并在创建事务确实发生的记录之前快速删除密钥。