哪个更安全——iframe还是CORS——用于创建嵌入第三方网站的小部件
Which is more secure - iframe or CORS - for creating a widget intended for embedding on 3rd party sites?
当构建一个旨在嵌入第三方网站的小部件时,关于如何做到这一点似乎有两种思想:
- 使用
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方法似乎总体上更安全,并且在交互时实现弹出窗口可以减轻点击劫持风险。
相关文章:
- 是否可以在第三方网站中嵌入谷歌网络应用程序
- 检测第三方网站的动态DIV容器的大小
- 强制浏览器从第三方网站下载视频
- GWT:登录到受密码保护的第三方网站
- 从我的网站查询第三方网站的数据库
- 在加载第三方网站时显示加载消息
- 第三方网站的登录对话框
- 如何使用 AngularJs 构建要嵌入到第三方网站中的小部件
- 如何在第三方网站上隔离Javascript
- 有没有一种方法可以暂停(稍后取消暂停)所有在第三方网站上运行的js脚本,使用greatemonkey
- 如何从第三方网站提取数据,例如价格
- 如何在核心PHP上显示显示来自第三方网站的RSS提要的要求
- 在第三方网站上运行的安全JavaScript
- 复制/粘贴第三方网站的Lightbox脚本
- 如何使用Javascript/JQuery从第三方网站加载XML
- 从第三方网站下载csv文件的PHP代码
- 自动填写第三方网站的详细信息
- 哪个更安全——iframe还是CORS——用于创建嵌入第三方网站的小部件
- 跨域问题,而张贴在第三方网站在angular js
- 通过外部链接将表单附加到第三方网站