关于spring-security(记住密码,CSRF)

 更新时间:2024年11月16日 08:56:54   作者:何老生  
文章主要介绍了Spring Security中的PersistentTokenRepository、CSRF保护机制以及如何在登录页面添加记住我功能,并分享了相关实现代码和配置

注册PersistentTokenRepository

  • PersistentTokenRepository实现类
  • InMemoryTokenRepositoryImpl基于内存实现
  • JdbcTokenRepositoryImpl基于数据库实现

基于内存实现

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PersistentTokenRepository persistentTokenRepository() {
PersistentTokenRepository tokenRepository = new InMemoryTokenRepositoryImpl();
return tokenRepository;
}
}

修改安全配置类

http.rememberMe().tokenRepository(persistentTokenRepository())
                .tokenValiditySeconds(120)//设置有效时长,单位秒
                .userDetailsService(userDetailsService)

页面添加记住我复选框

记住我:

<input type="checkbox"name="remember-me"title="记住密码"/><br/>

此处:name 属性值必须位remember-me.不能改为其他值

CSRF 理解(默认开启)

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。

由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。

这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

从Spring Security 4.0开始,默认情况下会启用CSRF保护,以防止CSRF攻击应用程序,Spring Security CSRF会针对PATCH,POST,PUT和DELETE方法进行防护。

解决方案

检查Referer字段

Referer字段通常由浏览器在HTTP请求中发送,告诉服务器用户是从哪个页面链接过来的。然而,由于Referer字段可以被用户修改或禁用,因此不能完全信任它来确保请求是从指定页面发起的。

以下是检查Referer字段的一些常见缺点:

  • 用户可以修改Referer字段:一些用户可能会修改HTTP请求头中的Referer字段,以试图绕过安全检查。
  • Referer字段可能被缓存:某些代理服务器或缓存服务器可能会缓存Referer字段

CSRFToken

由于CSRF 是开启的所以我们在登陆是未检出token,则被认定为csrf攻击,报异常

security实现

在登录页面添加一个隐藏域:

<input type="hidden"th:if="${_csrf}!=null" th:value="${_csrf.token}" name="_csrf"/>

关闭安全配置的类中的csrf

// http.csrf().disable();

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • struts2实现多文件上传

    struts2实现多文件上传

    这篇文章主要为大家详细介绍了struts2实现多文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Seata集成Mybatis-Plus解决多数据源事务问题

    Seata集成Mybatis-Plus解决多数据源事务问题

    当进行业务操作时,订单发生异常 ,进行了回滚操作,因为在不同的数据库实例中,余额却扣除成功,此时发现数据不一致问题,本文给大家介绍Seata集成Mybatis-Plus解决多数据源事务问题,感兴趣的朋友一起看看吧
    2023-11-11
  • Java使用Tess4J实现图像识别方式

    Java使用Tess4J实现图像识别方式

    这篇文章主要介绍了Java使用Tess4J实现图像识别方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java实现树形List与扁平List互转的示例代码

    Java实现树形List与扁平List互转的示例代码

    在平时的开发中,我们时常会遇到需要将"树形List"与"扁平List"互转的情况,本文为大家整理了Java实现树形List与扁平List互转的示例代码,希望对大家有所帮助
    2023-05-05
  • Java获取泛型实际类型的方法详解

    Java获取泛型实际类型的方法详解

    这篇文章主要介绍了Java获取泛型实际类型的方法详解,泛型,即“参数化类型”,一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数,需要的朋友可以参考下
    2023-11-11
  • java实现简单计算器功能

    java实现简单计算器功能

    这篇文章主要为大家详细介绍了java实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • SpringBoot获取配置文件中的配置项的常用方式

    SpringBoot获取配置文件中的配置项的常用方式

    这篇文章主要介绍了SpringBoot获取配置文件中的配置项的常用方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-11-11
  • java application maven项目打自定义zip包实例(推荐)

    java application maven项目打自定义zip包实例(推荐)

    下面小编就为大家带来一篇java application maven项目打自定义zip包实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • SpringBoot参数校验的最佳实战教程

    SpringBoot参数校验的最佳实战教程

    开发过程中,后台的参数校验是必不可少的,下面这篇文章主要给大家介绍了关于SpringBoot参数校验的最佳实战,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 浅谈利用Spring的AbstractRoutingDataSource解决多数据源的问题

    浅谈利用Spring的AbstractRoutingDataSource解决多数据源的问题

    本篇文章主要介绍了浅谈利用Spring的AbstractRoutingDataSource解决多数据源的问题,具有一定的参考价值,有需要的可以了解一下
    2017-08-08

最新评论