登录表单是否需要 CSRF 保护?

登录表单是否需要 CSRF 保护?

Chris Yue One comment
Posts

2020-02-18 补充:在说『登录 CSRF』之前先说说『CSRF(Cross Site Request Forgery)』,即跨站请求伪造。举一个真实发生过的例子,攻击者先在自己网站上创建一个页面,这个页面有一个表单,表单的提交路径却是新浪微博发新微博的地址,并且这个页面有 JS 可以让页面加载完毕的时候就自动提交表单的内容。攻击者再想各种办法,骗新浪微博某些大 V 去点击这个页面的链接,受害大 V 只要在新浪微博是登录状态,表单的内容就会成功被发送。如果攻击者的页面通过 iframe 等方式隐藏页面,大 V 们可能『被动』发了微博都没有任何感知。防守也不难,页面显示表单时,给台设备分配不同的随机码,而处理表单提交的时候,需要验证随机码是否一致。而随机码跟设备是绑定的,攻击者不可能猜的出来受害者的设备的随机码是什么,从而防止了 CSRF 攻击。而这个随机码,就叫 CSRF Token。

再说回『登录 CSRF』这个话题。在过去相当长一段时间里,我认为登录表单是不需要 CSRF 保护的。我的想法是,让受害者在不知情的情况下做一些对攻击者有意义的『操作』才是 CSRF 存在的意义(比如让大 V 发布一些营销类的信息)。骗一个人去登录,意义何在呢?

后来专门上网查阅了一下,才发现事情没这么简单,原来还可以这么玩儿,依然以微博为例子:

  1. 攻击者在新浪微博创建一个帐号
  2. 通过登录 CSRF 让被攻击的用户在不知情的情况下登录微博
  3. 不明真相的受害者如果不注意,还以为是自己的微博账户,创建了相册,并且上传了一些非公开的照片
  4. 攻击者再登录此账户,就可以随意浏览受害者刚上传的非公开照片了

虽然不如普通 CSRF 造成的危害直接,不过对于注重用户隐私的网站,是没有理由不防此种攻击的。

附上:斯坦福关于 CSRF 的资料,我不创造姿势,我只做姿势的搬运工

登录表单是否需要 CSRF 保护? by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

如果觉得文章还不错,就请扫码鼓励一下作者吧
天使打赏人

One comment

morou

十一月 12, 2019 在 11:24 下午

攻击过程和普通的CSRF攻击应该没有区别,只是点击恶意链接后会向指定网站发送登录请求,保存下登录的cookie

发表评论

21 − = 16