spring-security中csrf防御原理
来源:互联网 发布:大闹天宫瑰羽7进8数据 编辑:程序博客网 时间:2024/06/06 15:39
..
// 先从tokenRepository中加载token CsrfToken csrfToken = tokenRepository.loadToken(request); final boolean missingToken = csrfToken == null; // 如果为空,则tokenRepository生成新的token,并保存到tokenRepository中 if(missingToken) { CsrfToken generatedToken = tokenRepository.generateToken(request); // 默认的SaveOnAccessCsrfToken方法,记录tokenRepository, // tokenRepository,response,获取token时先将token同步保存到tokenRepository中 csrfToken = new SaveOnAccessCsrfToken(tokenRepository, request, response, generatedToken); } // 将token写入request的attribute中,方便页面上使用 request.setAttribute(CsrfToken.class.getName(), csrfToken); request.setAttribute(csrfToken.getParameterName(), csrfToken); // 如果不需要csrf验证的请求,则直接下传请求(requireCsrfProtectionMatcher是默认的对象,对符合^(GET|HEAD|TRACE|OPTIONS)$的请求不验证) if(!requireCsrfProtectionMatcher.matches(request)) { filterChain.doFilter(request, response); return; } // 从用户请求中获取token信息 String actualToken = request.getHeader(csrfToken.getHeaderName()); if(actualToken == null) { actualToken = request.getParameter(csrfToken.getParameterName()); } // 验证,如果相同,则下传请求,如果不同,则抛出异常 if(!csrfToken.getToken().equals(actualToken)) { if(logger.isDebugEnabled()) { logger.debug("Invalid CSRF token found for " + UrlUtils.buildFullRequestUrl(request)); } if(missingToken) { accessDeniedHandler.handle(request, response, new MissingCsrfTokenException(actualToken)); } else { accessDeniedHandler.handle(request, response, new InvalidCsrfTokenException(csrfToken, actualToken)); } return; } filterChain.doFilter(request, response);
使用样例
在web.xml中增加spring的过滤器代理
在spring的配置文件中增加过滤器
--> 如果配置了CsrfRequestDataValueProcessor,并且使用了spring的form标签来写表单代码,则这样就可以了。否则需要在页面上书写相关代码
首先获取token
然后在发送请求之前将token放入header中(或者form表单中)
阅读全文
0 0
- spring-security中csrf防御原理
- spring-security中的csrf防御机制
- spring-security中的csrf防御机制
- spring-security中的csrf防御机制
- spring security的csrf防御机制在ajax中的应用
- CSRF原理和防御
- Spring Security csrf学习
- spring mvc中实现csrf安全防御简记
- 再谈Spring MVC中对于CSRF攻击的防御
- CSRF的原理及防御
- CSRF攻击原理及防御
- CSRF攻击与防御原理
- CSRF攻击原理及防御
- CSRF攻击与防御原理
- Spring Security 4.x 启用CSRF防御后logout只能是POST请求
- Spring Mvc 防御CSRF攻击
- spring security csrf 学习笔记
- spring boot security csrf ignore
- [今天这个问题我必须记录一下] 英文字符和数字的编码范围是 [\x00-\xff]
- 第四周作业
- React创建组件的三种方式及其区别
- 计算机导论第四课之响应查询
- 循环
- spring-security中csrf防御原理
- 有上下界的网络流
- iOS 关于MVVM With ReactiveCocoa设计模式的那些事
- 截止2016年5月之前双色球数据统计
- poj1222 EXTENDED LIGHTS OUT
- 共享文件
- 读取xml文件
- nsis中常用的对$INSTDIR赋值的两种方法
- sysbench1.0.6 初学