前言
Cross-site request forgery 简称为“CSRF”,中文名为跨站请求伪造。在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接,用来触发目标网站的服务),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。
满足攻击的条件
- 用户已登录目标网站。如果有没有登录,调用的时候可能会提示先登录
- 有调用目标网站的服务
攻击方式
拿到目标网站服务调用的地址,写好参数,欺骗目标用户点击,触发服务调用。
如:
http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?phonenum=132367738&submit=submit
上面这个是用GET方式修改用户手机号码的地址,然后我们伪造一个链接:
<a href='http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?phonenum=18567886521&submit=submit'>登录</a>
欺骗用户点击,一旦点击了,资料就会改成我们链接里的手机号码。这个例子举得比较简单,正常修改号码都会要提供验证码
防御
修改功能要增加
- 增加验证码,调用时验证。但是会增加用户的成本,每次都要填写
- 在HTTP Header 增加csrf-token。推荐