我正在开发单页应用程序并选择用于用户会话,cookie或localstorage的方案。特别是,我正在考虑CSRF攻击情形。最合理的CSRF攻击方案IMHO是在不可见的iframe中自动提交表单。但它是如何运作的?
假设我是maliciouswebsite.net
的开发者,并且在我的网页上我创建了一个隐藏的iframe,指向bank.com
网站上的某个页面,目的是让用户访问{{1}并登录maliciouswebsite.net
,通过在隐形iframe中自动提交表单,不情愿地将钱汇给我。
但是在这种情况下,iframe中的代码不能从bank.com
编写脚本,因为它将被视为Cross-Origin,并且浏览器不允许maliciouswebsite.net
的主框架中的javascript操作使用maliciouswebsite.net
不可见框架的元素。
另一种情况是bank.com
只是呈现一个形式为maliciouswebsite.net
的不可见iframe。所以这个iframe的起源仍然是action=bank.com/api/transfer_money?...
。但在这种情况下,表单不会在maliciouswebsite.net
看到用户的cookie,也不会被允许做任何事情,对吗?
答案 0 :(得分:1)
另一种情况是,恶意网站只是提供了一个 带有表单动作的隐形iframe = bank.com / api / transfer_money?....所以 这个iframe的起源仍然是恶意网站。但就是这样 如果表单不会在bank.com上看到用户的cookie,也不会 允许做任何事,对吗?
是的,如果使用IFrame,这就是它的工作方式。
基本上,它从一个带有表单的页面开始,该表单自动提交到另一个域,就像你说的那样。有关示例,请参阅this answer。
然后,为了不提醒用户提交表单,攻击者将该表单的页面嵌入隐藏的IFrame中。
只要用户已登录bank.com
,浏览器就会自动发送Cookie 。请记住,表单不需要查看Cookie(maliciouswebsite.net
),只需要查看目标域(bank.com
)。