当前位置: 首页 > news >正文

spring-security(记住密码,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();

 


http://www.mrgr.cn/news/69918.html

相关文章:

  • MySQL —— MySQL逻辑架构与查询过程
  • 18B电阻
  • CSS:导航栏三角箭头
  • 笔记 | image may have poor performance,or fail,if run via emulation
  • Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测
  • git上feature合并到development分支
  • C#-抽象类、抽象函数
  • 腾讯云双11狂欢:拼团优惠、会员冲榜、限时秒杀,多重好礼等你来拿!
  • 论文解读之SDXL: Improving Latent Diffusion Models forHigh-Resolution Image Synthesis
  • 「iOS」——知乎日报第三周总结
  • 销售管理SCRM助力企业高效提升业绩与客户关系管理
  • 【C++练习】二进制到十进制的转换器
  • The Rank-then-Encipher Approach
  • 「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建
  • goframe开发一个企业网站 开发环境DOCKER 搭建16
  • MATLAB实现最大最小蚁群算法(Max-Min Ant Colony Optimization, MMAS)
  • leetcode hot100【LeetCode 131.分割回文串】java实现
  • Jquery添加或删除Class属性实例代分享
  • Linux应用项目之量产工具(一)——显示系统
  • SwiftUI开发教程系列 - 第7章:数据流和状态管理
  • 信息安全数学基础(46)域和Galois理论
  • Python实现Delaunay三角剖分之Bowyer-Watson算法
  • 区块链技术在版权保护中的应用
  • Java项目实战II基于Spring Boot的农商对接系统的设计与实现(开发文档+数据库+源码)
  • Iceberg 写入和更新模式,COW,MOR(Copy-on-Write,Merge-on-Read)
  • 2024/11/10周报