SpringBoot 如何防御 CSRF 侵犯?
发布时间:2021-06-08 19:15:08 所属栏目:安全 来源:互联网
导读:CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。 这是一种非常常见的 Web 攻击方式,其实是很好防御的,但是由于经常被很多开发者忽略,进而导致很多网站实际上都存在 CSRF 攻击的安全隐患。 今天松哥就来和大家聊一聊什么是 CSRF 攻击以及
|
CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。
这是一种非常常见的 Web 攻击方式,其实是很好防御的,但是由于经常被很多开发者忽略,进而导致很多网站实际上都存在 CSRF 攻击的安全隐患。
今天松哥就来和大家聊一聊什么是 CSRF 攻击以及 CSRF 攻击该如何防御。
1.CSRF原理
想要防御 CSRF 攻击,那我们得先搞清楚什么是 CSRF 攻击,松哥通过下面一张图,来和大家梳理 CSRF 攻击流程:
其实这个流程很简单:
假设用户打开了招商银行网上银行网站,并且登录。
登录成功后,网上银行会返回 Cookie 给前端,浏览器将 Cookie 保存下来。
用户在没有登出网上银行的情况下,在浏览器里边打开了一个新的选项卡,然后又去访问了一个危险网站。
这个危险网站上有一个超链接,超链接的地址指向了招商银行网上银行。
用户点击了这个超链接,由于这个超链接会自动携带上浏览器中保存的 Cookie,所以用户不知不觉中就访问了网上银行,进而可能给自己造成了损失。
CSRF 的流程大致就是这样,接下来松哥用一个简单的例子和小伙伴们展示一下 CSRF 到底是怎么回事。
2.CSRF实践
接下来,我创建一个名为 csrf-1 的 Spring Boot 项目,这个项目相当于我们上面所说的网上银行网站,创建项目时引入 Web 和 Spring Security 依赖,如下:
创建成功后,方便起见,我们直接将 Spring Security 用户名/密码 配置在 application.properties 文件中:
spring.security.user.name=javaboy
spring.security.user.password=123
然后我们提供两个测试接口:
@RestController
public class HelloController {
@PostMapping("/transfer")
public void transferMoney(String name, Integer money) {
System.out.println("name = " + name);
System.out.println("money = " + money);
}
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
假设 /transfer 是一个转账接口(这里是假设,主要是给大家演示 CSRF 攻击,真实的转账接口比这复杂)。
![]() (编辑:阜新站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

