在构建旨在嵌入第三方网站的窗口小部件时,似乎有两种思路如何做到这一点:
iframe
s 使用iframe
方法时,跨域请求不是问题,因为服务器认为请求来自其自己的页面。
使用主页面的DOM时,跨域请求是个问题,服务器需要使用适当的CORS标头进行响应才能正常工作。
这两种方法中的哪一种更安全,在实施这些方法时应考虑哪些安全问题?
答案 0 :(得分:3)
您可能会发现这篇文章很有趣 - How to protect widgets from forged requests:
您不希望此[widget]容易受到CSRF的攻击,因此您可以向页面编写iframe。根据原始继承规则,父站点无法读取CSRF令牌。然而,点击劫持(或像劫持)呢?因为CSRF你必须在iframe中,而x-frame-options无法帮助,对于帧破坏者也是如此
Origin
(即协议,域和端口)。最后,它取决于您的小部件的功能。父网站在用户上下文中自动提交表单或单击窗口小部件上的按钮会产生什么后果?如果有喜欢或+1按钮,主机页面可能会欺骗性地宣传他们的网站,方法是在未经用户知情或同意的情况下向您注册/ + 1。这适用于两种方法,只有攻击方法不同(即CSRF或Clickjacking)。
上述帖子中接受的答案提供了CSRF与Clickjacking的解决方案:
单击窗口小部件需要打开一个包含新页面的弹出窗口 - 一个iframe不够好,它必须是一个新窗口 - 完全在您的Web应用程序的控制之下。确认该页面上的操作,无论它是什么。
是的,这有些不太优雅,但目前的网络安全架构并没有为您提供更好的选择。
总之,IFrame方法似乎具有更高的安全性,并且在交互时实现弹出窗口可以减轻Clickjacking风险。