CSRF--跨站点请求伪造
原理
攻击者盗用身份以用户名义发送恶意请求
可能用到的标签
<link href=" ">
<img src=" ">
<iframe src=" ">
<script src=" ">
csrf与xss的区别
GET
分析源码可以看出来检查了 HTTP_REFERER中是否包含SERVER_NAME
所以不能随意构造一个URL诱使管理员点击
所以,我们可以将攻击页面命名为192.168.3.3.html就可以绕过了
原本数据库中管理员的密码为
让管理员访问http://localhost/csrf/192.168.3.3.php从而完成csrf攻击,使得密码修改成为我们设定的密码
此时管理员密码修改成功
POST
防御
验证码
但为了用户体验,不能每一步操作都使用验证码
Referer Check
Referer Check除了防止图片盗链意外,还可以用来检查请求是否来自合法的“源”
缺陷在于,服务器并非什么时候都能取到referer
很多时候用户处于隐私保护的考虑,限制了referer
比如从https跳转到http,出于安全的考虑,浏览器不会发送referer
但是可以通过referer check来监控csrf攻击的发生
token
token需要够随机,为用户和服务器所共同持有,不能被第三方知晓
token可以放在用户cookie中,或服务器session中
在提交请求时,验证表单中的token是否与cookie/session中一致
token使用原则:
- 随机
- 保密性
- 可以允许在一个用户的有效生命期内,在token消耗掉前使用同一个token
- 考虑生成多个token