概念
Cross-site request forgery简称“CSRF”(跨站请求伪造)也被称为one-click attack 或者 session riding。
攻击思路
以淘宝为例,目的修改密码。
打开自己的淘宝,进入修改密码的页面,填写完信息后发送请求,然后把这个URL用抓包的方式获取下来,然后发送给对方。
成功的条件:
1.对方已经打开淘宝。
2.对方点击你的连接。
满足上面两个条件,这个攻击就完成了。
CSRF与XSS的区别
CSRF是攻击者借用用户的权限完成进攻,而XSS是攻击者盗取用户账户和密码之后获取权限完成进攻。
验证是否存在CSRF漏洞
1.对目标网站增添,删除的地方进行逻辑判断,判断请求是否可以被伪造。具体来说就是把每次“请求”的数据包抓下来进行分析,看有没有重复利用“请求”的可能,还有就是修改信息最好需要验证密码。
2.确认凭证的有效期。这个基本是存在的,因为现在的网页为了让用户使用方便,只要不关闭浏览器,都会帮用户保持着登录态,这也给攻击者利用CSRF漏洞提供了机会。
具体案例
GET请求方式案例:
对修改信息的这个请求进行抓包,得到:
GET /pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=18656565545&add=usa&email=lili%40pikachu.com&submit=submit HTTP/1.1
从抓包的情况可以分析出,这是存在重复利用给的可能的(没有token验证,或者其他参数进行验证),而且因为是GET的请求方式,我们可以直接在URL上修改我们想要修改的信息,并且把它补全为一个可行的URL:
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=0000000&add=usa&email=lili%40pikachu.com&submit=submit
我把电话号改为了0000000,现在来看看lili的个人信息:
然后发送我们刚刚构造的URL发送给lili,当lili点击我们构造的URL后,再来看看lili的个人信息:
修改成功!
POST请求方式案例:(先欠下)
思路:
CSRF常见防范措施:
1.增加token验证:
就是在每次请求的时候验证一个随机码,这个验证码要足够长,足够随机。
2.设置会话过期机制:
1.不让电脑一直处于登录态,在页面关闭的时候,退出浏览器的时候要注销掉这个登录态。
2.不能让无操作会话一直处于登录态,在一个会话长期处于无操作状态时比如15分钟,自动注销登录态。
3.升级敏感信息的安全管理:
1.比如在修改一些敏感信息的时候需要对身份进行再次验证,比如再次输入密码等等。
2.比如验证referer,设置白名单,限制访问的域名。
3.敏感信息用POST方式进行传输。
4.设置验证码:防止暴力破解。