我们首先统一一下口径: 站点 A:被攻击的网站 站点 B:伪造请求的网站
一般网站的防御方法是: 判断请求中的 token 和 cookie 中的 token 是否相同,相同则表示请求发起者和会话用户是同一个人。
这种防御方法可行的原因是: 站点 B 无法获取到站点 A 的 cookie,所以无法在请求中添加 token。
但,我们假设站点 B 知道站点 A 的某个页面表单里有隐藏的 token 字段,那么,站点 B 在自己的页面中写一个隐藏的 iframe 去请求这个页面。(这里有一个问题,iframe 会创建新的会话吗?但不管会不会,都有如下可能)
iframe 不会生成新的会话。那么对于用户而言,假设用户在访问站点 A 后没有关闭站点又去访问了站点 B,那么站点 B 中的 iframe 和站点 A 属于同一个会话,也就是说他们的 token 相同。这个时候站点 B 通过预先写好的脚本去获取到 iframe 中的 token,然后在伪造的请求中加入这个 token,能否成功?
iframe 会生成新的会话。那也就是说站点 B 的 iframe 中的 token 和站点 A 的 token 值是不相同的,但是可以使用以下方法去伪造请求:站点 B 不是直接在页面中添加伪造请求,而是在 iframe 里去添加伪造请求,由于 iframe 中是站点 A 的会话,所以请求会带着站点 A 的 cookie 一起发出去,由于 iframe 和站点 A 共用一套 cookie (因为同域),所以就成功盗用了用户的身份。这种方法可行吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.