vlambda博客
学习文章列表

浅析CSRF攻击和防御


CSRF

CSRF(Cross-site request forgery)跨站请求伪造,攻击者盗用受害人的已登录身份,向服务器提交恶意的请求,对于服务器来说,伪造的请求完全合法,虽然这并不是受害人的本意。因为受害人通过浏览器完成登录操作后,服务器已经完成对用户信息的认证,但服务器终究不知道到底是谁。


攻击过程

1.受害人登录受信任的网站,输入用户名和密码

2.受信任网站通过验证通过后,生成受害人cookie。

3.受害人未登出受信任网站,然后访问了危险网站,该网站利用受害人cookie信息,向受信任网站发起恶意请求。


危害

一旦攻击者挟持了你在某信任网站的cookie信息,就可以向网站发起恶意的请求,比如以受害人名义发帖、发邮件、购物、转账等一系列恶意操作。


举例

假设某论坛存在CSRF漏洞,你在该论坛登录完成后,然后访问了某危险网站,危险网站提前挖好了坑(可以在该论坛以受害人名义发帖,即发起post请求;同样可以回帖,删帖,甚至盗取用户信息)。当你打开危险网站时,网站可以利用图片加载技术或页面事件,挟持你的登录信息,完成恶意操作。


防御

了解了过程,自然就有了对应的防御措施。通常可以使用以下手段避免攻击:

  1. 验证http referer,网站请求都应该来自受信任页面链接

  2. 添加验证码,提交请求时进行人工确认

  3. 表单隐藏随机码,由服务端下发随机码,发起请求时由服务端验证

  4. 为cookie设置SameSite、HttpOnly,防止cookie泄露


总结

CSRF漏洞很多时候不被重视,其实危害巨大。解决CSRF也并非难事,尤其是用户基数大的网站更要保护好用户信息安全。