CSRF 和 iframe
Posted
技术标签:
【中文标题】CSRF 和 iframe【英文标题】:CSRF and iframes 【发布时间】:2016-11-12 10:59:05 【问题描述】:在防止 CSRF 攻击时,我应该采取以下步骤:
-
用户登录,设置会话cookie并生成CSRF令牌
用户提交表单(带有令牌),它应该与会话中的令牌匹配
但是当攻击者使用 iframe 时,它也会发送会话 cookie,生成相同的 CSRF 令牌,iframe 中的表单也将包含该令牌。这样攻击者就可以访问了。
我在这里错过了什么?
【问题讨论】:
How to prevent my site page to be loaded via 3rd party site frame of iFrame的可能重复 【参考方案1】:您错过了这样一个事实,即 IFrame 在同源策略下无法完全访问 Window 对象,除非它们的来源匹配。 Details here:
javascript API,例如 iframe.contentWindow、window.parent、 window.open 和 window.opener 允许文档直接引用 彼此。当两个文档的来源不同时,这些 引用提供对 Window 和 Location 对象的非常有限的访问
因此,攻击者的框架将无法读取window.document
,也无法读取任何包含表单中的 CSRF 字段。
不过,您确实需要担心 Clickjacking。这是您的网站在 IFrame 中加载但随后变为透明的地方,并且用户被引诱点击攻击者页面上的某些内容(例如“赢得 iPad 点击此处”),这实际上导致点击实际上发生在敏感页面上在您的页面中发挥作用。
建议使用X-Frame-Options: DENY
和内容安全政策frame-ancestors
指令来防止您的网站被框架化。
【讨论】:
但是如果 iFrame 中被攻击的表单是空的并且攻击者无法访问它来使用 JavaScript 填充它,那么点击劫持如何发挥作用? 这里主要有两个场景。 1) 如果表单仅包含按钮。 2) 任何存在的表单都可以使用查询字符串或 POST 提供的表单值进行预填充。在此阶段可能没有任何 CSRF 检查,因为填写表单不被视为更改状态的操作。以上是关于CSRF 和 iframe的主要内容,如果未能解决你的问题,请参考以下文章