从 iframe 上传文件都有哪些安全隐患?

Posted

技术标签:

【中文标题】从 iframe 上传文件都有哪些安全隐患?【英文标题】:What are the security implications of uploading files from an iframe?从 iframe 上传文件有哪些安全隐患? 【发布时间】:2021-05-21 19:22:51 【问题描述】:

假设我有一个绘图 html 应用程序,我的用户可以在他们的网页中使用它。它们包括在 iframe 中设置其 src 的小部件(将其生成的密钥作为查询字符串传递),我将其与 frame-ancestors 标头一起发送以限制对其域的使用,并且他们的用户可以使用小部件进行绘制。

现在假设他们想要加载保存在他们服务器上的绘图并将它们传递给我的 iframe 小部件,并且他们希望用户单击一个按钮(在他们的站点上)以将当前绘图保存在他们的服务器上。在这两种情况下,他们都可以向我的 iframe 发送一条指定签名 url 的消息,我的 iframe 可以监听该事件并使用 fetch 分别下载或上传所需的资产。

代表他们下载或上传 iframe 会带来哪些安全隐患?这个设置是可靠的还是可以被滥用?如果它可以被滥用,如何?

【问题讨论】:

【参考方案1】:

我不确定下载和上传,但可以在 iframe 之间共享/传递消息。

更多细节在这里 - https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

安全问题

如果您不希望收到来自其他站点的消息,请不要为消息事件添加任何事件侦听器。这是避免安全问题的完全万无一失的方法。

如果您确实希望收到来自其他站点的消息,请始终使用源属性和可能的​​源属性来验证发件人的身份。任何窗口(例如,包括http://evil.example.com)都可以向任何其他窗口发送消息,并且您无法保证未知发件人不会发送恶意消息。然而,在验证了身份之后,您仍然应该始终验证接收到的消息的语法。否则,您信任的仅发送受信任消息的站点中的安全漏洞可能会在您的站点中打开跨站点脚本漏洞。

当您使用 postMessage 将数据发送到其他窗口时,请始终指定确切的目标原点,而不是 *。恶意网站可以在您不知情的情况下更改窗口的位置,因此它可以拦截使用 postMessage 发送的数据。

【讨论】:

以上是关于从 iframe 上传文件都有哪些安全隐患?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 在主机上上传

将二进制数据传递给非二进制安全函数都有哪些安全隐患?

php 上传大文件 插件 都有哪些

php上传功能怎么实现点击浏览在打开文件之后直接上传?

在 PHP 上传时检查病毒的选项都有哪些?

在表单发布完成对目标执行文件上传后,从 iframe 获取数据