CSRF--跨站点请求伪造

原理

攻击者盗用身份以用户名义发送恶意请求


可能用到的标签

  1. <link href=" ">
  2. <img src=" ">
  3. <iframe src=" ">
  4. <script src=" ">

csrf与xss的区别

CSRF--跨站点请求伪造


GET

分析源码可以看出来检查了 HTTP_REFERER中是否包含SERVER_NAME
所以不能随意构造一个URL诱使管理员点击
所以,我们可以将攻击页面命名为192.168.3.3.html就可以绕过了
CSRF--跨站点请求伪造
原本数据库中管理员的密码为
CSRF--跨站点请求伪造
CSRF--跨站点请求伪造
让管理员访问http://localhost/csrf/192.168.3.3.php从而完成csrf攻击,使得密码修改成为我们设定的密码
此时管理员密码修改成功
CSRF--跨站点请求伪造


POST

可以看pikachu实验的csrf的post型


防御

验证码

但为了用户体验,不能每一步操作都使用验证码

Referer Check

Referer Check除了防止图片盗链意外,还可以用来检查请求是否来自合法的“源”
缺陷在于,服务器并非什么时候都能取到referer
很多时候用户处于隐私保护的考虑,限制了referer
比如从https跳转到http,出于安全的考虑,浏览器不会发送referer
但是可以通过referer check来监控csrf攻击的发生

token

token需要够随机,为用户和服务器所共同持有,不能被第三方知晓
token可以放在用户cookie中,或服务器session中
在提交请求时,验证表单中的token是否与cookie/session中一致

token使用原则:

  1. 随机
  2. 保密性
  3. 可以允许在一个用户的有效生命期内,在token消耗掉前使用同一个token
  4. 考虑生成多个token