如何通过 iframe 中的自动提交表单实施 XSRF 攻击?

How to implement an XSRF attack via auto-submitting form in iframe?

我正在开发单页应用程序并选择用于用户会话、cookie 或本地存储的方案。特别是,我正在考虑 CSRF 攻击场景。恕我直言,最合理的 CSRF 攻击方案是在不可见的 iframe 中自动提交表单。但它是如何工作的?

假设我是 maliciouswebsite.net 的开发者,我在我的页面上创建了一个不可见的 iframe,指向 bank.com 网站上的某个页面,目的是让用户访问 maliciouswebsite.net 并登录 bank.com,通过在不可见的 iframe 中自动提交表单,不情愿地将他的钱汇给我。

但在这种情况下,iframe 中的代码将无法从 maliciouswebsite.net 编写脚本,因为它将被视为跨源并且浏览器不允许 javascript 在 [的主框架中=10=] 使用 bank.com 不可见框架的元素进行操作。

另一种情况是 maliciouswebsite.net 只是呈现一个形式为 action=bank.com/api/transfer_money?... 的不可见 iframe。所以这个iframe的Origin还是maliciouswebsite.net。但在这种情况下,表单将不会在 bank.com 处看到用户的 cookie,并且不允许执行任何操作,对吗?

A different scenario is that maliciouswebsite.net just presents an invisible iframe with form action=bank.com/api/transfer_money?.... So the Origin of this iframe is still maliciouswebsite.net. But in such case the form won't see the user's cookie at bank.com and won't be allowed to do anything, right?

是的,这就是使用 IFrame 时的工作方式。

基本上它从一个页面开始,该页面上有一个自动提交到另一个域的表单,就像你说的那样。有关示例,请参阅 this answer

然后为了不提醒用户表单正在提交,攻击者将包含该表单的页面嵌入到隐藏的 IFrame 中。

浏览器会自动发送 cookie,只要用户已经登录 bank.com。请记住,表单不需要查看 cookies (maliciouswebsite.net),只有目标域需要 (bank.com).