CSRF(Cross Site Request Forgery)

跨站点请求伪造。是攻击者欺骗用户的浏览器去访问一个自己曾经认证过的网站。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了 web 中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

Spring Security 中 CRSF实现

springboot项目集成spring security 5.3.4.RELEASE 后,默认情况crsf是开启的。每次请求会校验请求头中 X-CSRF-TOKEN 的值与内存中保存的的是否一致,如果一致框架则认为当然登录页面是安全的,如果不一致,会报403。

默认首次登录页面会有一个_csrf的隐藏域

主要实现CsrfFilter过滤器

 @Overrideprotected void doFilterInternal(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {request.setAttribute(HttpServletResponse.class.getName(), response);// 从存储库session获取csrf tokenCsrfToken csrfToken = this.tokenRepository.loadToken(request);final boolean missingToken = csrfToken == null;if (missingToken) {// 如果没有,就生成并保存csrfToken = this.tokenRepository.generateToken(request);this.tokenRepository.saveToken(csrfToken, request, response);}// 将token设置到request中request.setAttribute(CsrfToken.class.getName(), csrfToken);request.setAttribute(csrfToken.getParameterName(), csrfToken);// 如果是默认方法(或者自定义的匹配方法),就放过if (!this.requireCsrfProtectionMatcher.matches(request)) {filterChain.doFilter(request, response);return;}// 从请求中获取浏览器端传递过来的 X-CSRF-TOKENString actualToken = request.getHeader(csrfToken.getHeaderName());// 浏览器没有,从头部取出时使用header name: X-CSRF-TOKENif (actualToken == null) {actualToken = request.getParameter(csrfToken.getParameterName());}// 不匹配或者没有token,抛出异常if (!csrfToken.getToken().equals(actualToken)) {if (this.logger.isDebugEnabled()) {this.logger.debug("Invalid CSRF token found for "+ UrlUtils.buildFullRequestUrl(request));}if (missingToken) {this.accessDeniedHandler.handle(request, response,new MissingCsrfTokenException(actualToken));}else {this.accessDeniedHandler.handle(request, response,new InvalidCsrfTokenException(csrfToken, actualToken));}return;}filterChain.doFilter(request, response);}

1. 从存储库session获取csrf token

HttpSessionCsrfTokenRepository.loadToken实现:

2. 默认方法放行

"GET", "HEAD", "TRACE", "OPTIONS"这4类方法会被放行,其它Method的http请求,都要验证_csrf的token是否正确。

matches方法实现 :

3.  从请求头获取实际token

4.  存储库token和实际token对比

不一致抛出异常,通过就放行。

Spirng Security 关闭 CSRF

public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception {httpSecurity.csrf().disable();}
}

Spring Security跨站请求伪造(CSRF)相关推荐

  1. 跨站请求伪造(CSRF)-简述

    跨站请求伪造(CSRF)-简述 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 ...

  2. 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题

    介绍 PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相 ...

  3. django16: csrf跨站请求伪造/CSRF相关装饰器

    CSRF 即跨站请求攻击 跨站请求伪造csrf钓鱼网站本质搭建一个跟正常网站一模一样的页面用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交唯一不同的在于收款账户人不同给用户书写for ...

  4. csrf防御 php,跨站请求伪造CSRF的防御实例(PHP版本)

    跨站请求伪造CSRF的防御:One-Time Tokens(不同的表单包含一个不同的伪随机值) 在实现One-Time Tokens时,需要注意一点:就是"并行会话的兼容".如果用 ...

  5. 浅谈跨站请求伪造(CSRF)

    浅谈跨站请求伪造(CSRF)   这里简单的记录一下CSRF漏洞~~ 什么是CSRF?   CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可 ...

  6. Nginx配置valid_referer解决跨站请求伪造(CSRF)

    Nginx配置valid_referer解决跨站请求伪造(CSRF) 文章目录 Nginx配置valid_referer解决跨站请求伪造(CSRF) 漏洞说明 漏洞描述 危害等级 修复建议 漏洞复现 ...

  7. 跨站请求伪造CSRF防护方法

    CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者X ...

  8. 跨站请求伪造(CSRF)+ 跨站脚本攻击(XSS)

    一.CSRF 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 X ...

  9. 跨站请求伪造——CSRF

    目录 csrf与xss的区别 CSRF的介绍 利用过程 实战 靶场下载 过程 一.A用户登录浏览器执行动作 二.B用户抓包制作csrf请求页面 三.本地保存 四.制作钓鱼网站 csrf 防御 csrf ...

最新文章

  1. Ceph分布式存储高性能设计
  2. selinux php errors,apache php selinux --Syntax error 无法加载模块
  3. Python 计算机视觉(十二)—— OpenCV 进行图像分割
  4. gitlab ci 自动化部署_前端gitLab加jenkins自动化构建和部署,以及服务器常用的linux命令行操作,免密登录...
  5. matlab电力系统潮流计算,大神们,求个电力系统潮流计算的matlab程序。
  6. 使用ganglia监控hadoop及hbase集群
  7. BufferedInputStream学习笔记
  8. 信息学奥赛C++语言:质因数分解
  9. 福大软工1816 · 第一次团队作业
  10. 构造方法注入和设值注入有什么区别
  11. 数据结构(字符串)—— 删除“b“和“ac“
  12. feign调用接口返回html,Spring Cloud Feign接口返回流
  13. QT创建和使用动态链接库
  14. java实现avg函数_PostgreSQL avg()函数
  15. Redis 常用命令
  16. 使用微软MediaCreationTool21H1.exe制作u盘windous10启动盘
  17. matlab双重差分模型,Stata+Eviews+R:倍分法/双重差分操作教程
  18. android reset方法,Android factory reset 流程
  19. vb整合多个excel表格到一张_如何使用VB实现多个excel表格合并在一个EXCEL表格里面...
  20. 【概率论】二项分布 Binomial Distribution

热门文章

  1. Java课程设计——家庭理财管理系统(SpringMVC+Mybatis+LayUI)
  2. Win8PE启动维护工具|WinXP_03PE下载|U盘启动装系统
  3. 华为SDH传输设备时钟配置方法
  4. NAND的局限性和使用寿命
  5. 移动硬盘数据恢复软件丢失如何找回
  6. 将 AD 辅域控制器升级为主域控制器
  7. 网络营销的前景与就业情况
  8. [蓝桥杯]天干地支(c++详解)
  9. android调用webXml 查询发车站和到达站查询火车时刻表
  10. 是什么让我们与销售机会擦肩而过?