java代码审计-CSRF
2023-5-3 09:3:48 Author: 亿人安全(查看原文) 阅读量:20 收藏

CSRF跨站请求伪造(Cross-site request forgery),当某个接口没有设置CSRF验证,点击了别人恶意的链接,可能会造成对这个接口发送相应的数据,造成某个数据被更改。常发生在转帐、修改密码等敏感操作中。

利用十分简单,构造一个IMG标签,加载的时候即可发送一个恶意
get请求(可以和xss联合使用,也可以是有钓鱼,诱骗的方式让其
点击get请求链接)
<img src=https://xxx.cn/csrf?xx=11 />

controller/CSRF.java

@GetMapping("/")
public String index() {
return "form";
}

@PostMapping("/post")
@ResponseBody
public String post() {
return "CSRF passed.";
}

前端提交数据页面(spring框架中调用_csrf.parameterName方法可以有效防止csrf)

<div>
<!-- th:action with Spring 3.2+ and Thymeleaf 2.1+ can automatically force Thymeleaf to include the CSRF token as a hidden field -->
<!-- <form name="f" th:action="@{/csrf/post}" method="post"> -->
<form name="f" action="/csrf/post" method="post">
<input type="text" name="input" />
<input type="submit" value="Submit" />
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
</form>
</div>

正常提交携带token值则能够通过请求

不提交token验证上面防护,这个字段就是用来表单提交,POST请求验证的csrf_token,后端生成的,提交后会和后端校验。如果我们直接通过POSTMAN或者其他post请求,缺少了csrf的token是无法完成的。如图

审计前端html、jsp等前端页面,在提交表单时是否有token(隐藏属性)


文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0MTIzNTgzMQ==&mid=2247505300&idx=1&sn=0b08f8cfa5f3410b42ba3f0db19de070&chksm=c2d71e8cf5a0979a113b1cc8a93af859edb94b4f67a19471d09f601f00a66c1056572e7ca837#rd
如有侵权请联系:admin#unsafe.sh