Spring Security中防护CSRF功能详解
目录
- CSRF是什么?
- CSRF可以做什么?
- CSRF的原理
- Spring Security解决方案
- Spring Security实现防护csrf的原理
- 总结
CSRF是什么?
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
CSRF可以做什么?
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…
造成的问题包括:个人隐私泄露以及财产安全。
CSRF的原理
下图简单阐述了CSRF攻击的思想:
从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
- 1.登录受信任网站A,并在本地生成Cookie。
- 2.在不登出A的情况下,访问危险网站B。
看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。
是的,确实如此,但你不能保证以下情况不会发生:
- 1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
- 2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了…)
- 3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
Spring Security解决方案
将配置类中下面这段代码注释掉:
.and().csrf().disable(); //关闭csrf防护
然后,在登录页面添加一个隐藏域:
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
Spring Security实现防护csrf的原理
spring security在认证之后会生成一个csrfToken保存到HttpSession或者Cookie中。
之后每次请求到来时,从请求中提取csrfToken,和保存的csrfToken作比较,进而判断当前请求是否合法。主要通过CsrfFilter过滤器来完成。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
SpringSecurity自定义Form表单使用方法讲解
目录 背景 实验-HttpBasic 实验-自定义登录页面 实验-自定义登录接口 实验-自定义登录数据参数 实验-自定义登录失败.成功处理器 实验-自定义登录成功跳转页面 实验-自定义退出接口 背景 本系列教程,是作为团队内部的培训资料准备的.主要以实验的方式来体验SpringSecurity的各项Feature. 新建一个SpringBoot项目,起名springboot-security-form,核心依赖为Web,SpringSecurity与Thymeleaf. <dependencie
-
Spring Boot中的SpringSecurity基础教程
目录 一 SpringSecurity简介 二 实战演示 0. 环境 介绍 1. 新建一个初始的springboot项目 2. 导入thymeleaf依赖 3. 导入静态资源 4. 编写controller跳转 5. 认证和授权 6. 权限控制和注销 7. 记住登录 8. 定制登录页面 三 完整代码 3.1 pom配置文件 3.2 RouterController.java 3.3 SecurityConfig.java 3.4 login.html 3.5 index.html 3.6 效果展
-
SpringBoot Security密码加盐实例
目录 修改加密和验证方法 自定义 DaoAuthenticationProvider 注册到ProciderManager中 修改加密和验证方法 /** * 生成BCryptPasswordEncoder密码 * * @param password 密码 * @param salt 盐值 * @return 加密字符串 */ public static String encryptPassword(String password,String salt) { BCryptPasswordEnco
-
Spring Security短信验证码实现详解
目录 需求 实现步骤 获取短信验证码 短信验证码校验过滤器 短信验证码登录认证 配置类进行综合组装 需求 输入手机号码,点击获取按钮,服务端接受请求发送短信 用户输入验证码点击登录 手机号码必须属于系统的注册用户,并且唯一 手机号与验证码正确性及其关系必须经过校验 登录后用户具有手机号对应的用户的角色及权限 实现步骤 获取短信验证码 短信验证码校验过滤器 短信验证码登录认证过滤器 综合配置 获取短信验证码 在这一步我们需要写一个controller接收用户的获取验证码请求.注意:一定要为"/sm
-
Spring Security短信验证码实现详解
目录 需求 实现步骤 获取短信验证码 短信验证码校验过滤器 短信验证码登录认证 配置类进行综合组装 需求 输入手机号码,点击获取按钮,服务端接受请求发送短信 用户输入验证码点击登录 手机号码必须属于系统的注册用户,并且唯一 手机号与验证码正确性及其关系必须经过校验 登录后用户具有手机号对应的用户的角色及权限 实现步骤 获取短信验证码 短信验证码校验过滤器 短信验证码登录认证过滤器 综合配置 获取短信验证码 在这一步我们需要写一个controller接收用户的获取验证码请求.注意:一定要为"/sm
-
Spring Security认证器实现过程详解
目录 拦截请求 验证过程 返回完整的Authentication 收尾工作 结论 一些权限框架一般都包含认证器和决策器,前者处理登陆验证,后者处理访问资源的控制 Spring Security的登陆请求处理如图 下面来分析一下是怎么实现认证器的 拦截请求 首先登陆请求会被UsernamePasswordAuthenticationFilter拦截,这个过滤器看名字就知道是一个拦截用户名密码的拦截器 主要的验证是在attemptAuthentication()方法里,他会去获取在请求中的用户名密码
-
Spring Security实现用户名密码登录详解
目录 环境 用户名密码登录 E-R图 POM依赖 配置文件 Mapper Service设计 HTML Controller 启动 完整代码 环境 JDK 1.8 Spring Boot 2.3.0.RELEASE Maven 3.6.1 H2 数据库 用户名密码登录 首先,我们用 Spring Security 实现用户输入用户名密码登录验证并获取相应权限. E-R图 完整建表语句 因为是测试程序,所以用H2数据库来测试.SQL脚本在resouces/db目录下,项目启动后会自动初始化脚本,无
-
JSP Spring配置文件中传值的实例详解
JSP Spring配置文件中传值的实例详解 通过spring提供方法,在配置文件中取传值 调用get方法 targetObject :指定调用的对象 propertyPath:指定调用那个getter方法 例1: public class Test1 { private String name = "nihao"; public String getName() { return name; } } Xml代码 <bean id="t1" cl
-
spring security中的csrf防御原理(跨域请求伪造)
什么是csrf? csrf又称跨域请求伪造,攻击方通过伪造用户请求访问受信任站点.CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报).Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为"沉睡的巨人". 举个例子,用户通过表单发送请求到银行网站,银行
-
C++头文件algorithm中的函数功能详解
目录 1. 不修改内容的序列操作 (1)all_of (2)any_of (3)none_of (6)find_if (7)find_if_not (8)find_end (10)adjacent_find (12)count_if (15)is_permutation (16)search 2. 修改内容的序列操作 (1)copy (2)copy_n (3)copy_if (4)copy_backward (5)move (6)move_backward (7)swap (8)swap_ran
-
Spring Security保护用户密码常用方法详解
1. 前言 本节将对 Spring Security 中的密码编码进行一些探讨. 2. 不推荐使用md5 首先md5 不是加密算法,是哈希摘要.以前通常使用其作为密码哈希来保护密码.由于彩虹表的出现,md5 和sha1之类的摘要算法都已经不安全了.如果有不相信的同学 可以到一些解密网站 如 cmd5 网站尝试解密 你会发现 md5 和 sha1 是真的非常容易被破解. 3. Spring Security中的密码算法 ObjectProvider<PasswordEncoder>参数.这里的P
-
Spring Security认证提供程序示例详解
1.简介 本教程将介绍如何在Spring Security中设置身份验证提供程序,与使用简单UserDetailsService的标准方案相比,提供了额外的灵活性. 2. The Authentication Provider Spring Security提供了多种执行身份验证的选项 - 所有这些都遵循简单的规范 - 身份验证请求由Authentication Provider处理,并且返回具有完整凭据的完全身份验证的对象. 标准和最常见的实现是DaoAuthenticationProvide
-
Spring Security 单点登录简单示例详解
Overview 最近在弄单点登录,踩了不少坑,所以记录一下,做了个简单的例子. 目标:认证服务器认证后获取 token,客户端访问资源时带上 token 进行安全验证. 可以直接看源码. 关键依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2
随机推荐
- Flex实现双轴组合图的设计思路及代码
- Python单链表简单实现代码
- 中文用户名的js检验正则
- 深入解析Python中的线程同步方法
- js监听鼠标点击和键盘点击事件并自动跳转页面
- Ajax读取数据之分页显示篇实现代码
- php简单创建zip压缩文件的方法
- Python进程间通信之共享内存详解
- C#事件用法实例浅析
- C++ 中引用和指针的关系实例详解
- JSP动态生成验证码存储在session作用范围内
- Python中方法链的使用方法
- Js中async/await的执行顺序详解
- Js 时间函数getYear()的使用问题探讨
- 浅析Java中print、printf、println的区别
- 实时计算知多少?
- Android UI手机信息页面设计
- php explode函数实例代码
- PHP Error与Logging函数的深入理解
- android开发教程之使用线程实现视图平滑滚动示例