哪个更安全——iframe还是CORS——用于创建嵌入第三方网站的小部件

Which is more secure - iframe or CORS - for creating a widget intended for embedding on 3rd party sites?

本文关键字:第三方 网站 创建 小部 用于 安全 iframe CORS 还是      更新时间:2023-09-26

当构建一个旨在嵌入第三方网站的小部件时,关于如何做到这一点似乎有两种思想:

  • 使用iframe s
  • 使用主页的DOM

当使用iframe方法时,跨域请求不是问题,因为服务器认为请求来自自己的页面。

当使用主页面的DOM时,跨域请求是一个问题,服务器需要用适当的CORS头进行响应才能正常工作。

这两种方法中哪一种更安全,在实现这些方法时应该考虑哪些安全问题?

你可能会觉得这篇文章很有趣-如何保护小部件免受伪造请求:

你不希望这个[widget]容易受到CSRF的攻击,所以你写了一个iframe到页面。根据源继承规则,父站点将无法读取CSRF令牌。但是点击劫持(或点赞劫持)呢?由于CSRF,您必须在iframe内,而x-frame选项不起作用,对于frame-busters

也是如此。

IFrame方法的缺点

  • 容易受到点击劫持/点赞劫持

DOM方法的缺点

  • 易受CSRF攻击
  • 服务器上的
  • CORS头将允许访问整个世界或预先注册的整个站点。虽然这本身并不存在漏洞,但必须小心确保没有敏感信息(例如用户数据)可用。没有办法限制只访问您的小部件-您将访问整个Origin(即协议,域和端口)。
  • 当你操纵DOM时,这些对象可以从你的小部件之外的页面的其余部分访问。

总结

最后,这取决于您的小部件的功能。在用户的上下文中,父站点自动提交表单或单击小部件上的按钮会产生什么后果?如果有"喜欢"或"+1"按钮,则托管页面可能在未经用户知情或同意的情况下,通过在您的网站上注册"喜欢"或"+1"来欺诈性地推广他们的网站。这将适用于两种方法,只是攻击方法不同(即CSRF或Clickjacking)。

对于CSRF vs Clickjacking,上面帖子上公认的答案有一个解决方案:

单击小部件需要打开一个包含新页面的弹出窗口——iframe不够好,它必须是一个新窗口——这完全在您的web应用程序的控制之下。确认该操作,无论它是什么,在该页

是的,这是有点不优雅,但目前的Web安全架构并没有给你任何更好的选择。

总而言之,IFrame方法似乎总体上更安全,并且在交互时实现弹出窗口可以减轻点击劫持风险。