2020-02-18 补充:在说『登录 CSRF』之前先说说『CSRF(Cross Site Request Forgery)』,即跨站请求伪造。举一个真实发生过的例子,攻击者先在自己网站上创建一个页面,这个页面有一个表单,表单的提交路径却是新浪微博发新微博的地址,并且这个页面有 JS 可以让页面加载完毕的时候就自动提交表单的内容。攻击者再想各种办法,骗新浪微博某些大 V 去点击这个页面的链接,受害大 V 只要在新浪微博是登录状态,表单的内容就会成功被发送。如果攻击者的页面通过 iframe 等方式隐藏页面,大 V 们可能『被动』发了微博都没有任何感知。防守也不难,页面显示表单时,给每台设备分配不同的随机码,而处理表单提交的时候,需要验证随机码是否一致。而随机码跟设备是绑定的,攻击者不可能猜的出来受害者的设备的随机码是什么,从而防止了 CSRF 攻击。而这个随机码,就叫 CSRF Token。
再说回『登录 CSRF』这个话题。在过去相当长一段时间里,我认为登录表单是不需要 CSRF 保护的。我的想法是,让受害者在不知情的情况下做一些对攻击者有意义的『操作』才是 CSRF 存在的意义(比如让大 V 发布一些营销类的信息)。骗一个人去登录,意义何在呢?
后来专门上网查阅了一下,才发现事情没这么简单,原来还可以这么玩儿,依然以微博为例子:
攻击者在新浪微博创建一个帐号
通过登录 CSRF 让被攻击的用户在不知情的情况下登录微博
不明真相的受害者如果不注意,还以为是自己的微博账户,创建了相册,并且上传了一些非公开的照片
攻击者再登录此账户,就可以随意浏览受害者刚上传的非公开照片了
虽然不如普通 CSRF 造成的危害直接,不过对于注重用户隐私的网站,是没有理由不防此种攻击的。
附上:斯坦福关于 CSRF 的资料,我不创造姿势,我只做姿势的搬运工
写作累,服务器也越来越贵
求分担,祝愿好人一生平安
天使打赏人