首页 > 开发 > Java > 正文

详解如何在spring boot中使用spring security防止CSRF攻击

2024-07-14 08:40:40
字体:
来源:转载
供稿:网友

CSRF是什么?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

 CSRF可以做什么?

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

CSRF漏洞现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

在一个spring boot项目中,需要防止CSRF攻击,可以只把spring security中的相关filter引入来进行.

在pom中添加相关依赖

  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-freemarker</artifactId>    </dependency>    <!-- Security (used for CSRF protection only) -->    <dependency>      <groupId>org.springframework.security</groupId>      <artifactId>spring-security-web</artifactId>    </dependency>  </dependencies>

在app启动时,添加CsrfFilter

@SpringBootApplicationpublic class Application extends WebMvcConfigurerAdapter {  @Bean  public FilterRegistrationBean csrfFilter() {    FilterRegistrationBean registration = new FilterRegistrationBean();    registration.setFilter(new CsrfFilter(new HttpSessionCsrfTokenRepository()));    registration.addUrlPatterns("/*");    return registration;  }  public static void main(String[] args) {    SpringApplication.run(Application.class, args);  }}

form中添加CSRF的hidden字段

<input name="${(_csrf.parameterName)!}" value="${(_csrf.token)!}" type="hidden">

ajax中添加CSRF的头

xhr.setRequestHeader("${_csrf.headerName}", "${_csrf.token}");

github地址是https://github.com/kabike/spring-boot-csrf

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表