【Java代码审计】CSRF篇

【Java代码审计】CSRF篇

  • 1.CSRF漏洞概述
  • 2.对 Referer 过滤不严导致的 CSRF 漏洞
  • 3.token 可重用导致 CSRF 漏洞
  • 4.CSRF 漏洞的防御

1.CSRF漏洞概述

CSRF(Cross Site Request Forgery,跨站点请求伪造)是目前出现次数比较多的漏洞,该漏洞能够使攻击者盗用被攻击者的身份信息,去执行相关敏感操作。实际上这种方式是攻击者通过一些钓鱼等手段欺骗用户去访问一个自己曾经认证过的网站,然后执行一些操作(如后台管理、发消息、添加关注甚至是转账等行为)简而言之,CSRF 漏洞的工作原理是攻击者盗用了用户的身份,以用户的名义发送恶意请求。

一次完整的 CSRF 攻击需要具备以下两个条件

  • 用户已经登录某站点,并且在浏览器中存储了登录后的 Cookie 信息
  • 在不注销某站点的情况下,去访问攻击者构造的站点

CSRF 攻击可能出现的场景有很多,如更改个人信息、添加/修改资料、关注用户或者与交易相关的操作等。CSRF 漏洞的出现通常是由于开发人员对该类型漏洞不了解,因而疏忽了对该类型漏洞的防范。

通常来说,检测 CSRF 漏洞是一项比较烦琐的工作,最简单的方法就是抓取一个正常请求的 GET/POST 数据包,删除 Referer 字段后再重新提交,如果该提交操作有效,那么基本上可以确定该操作存在 CSRF 漏洞

通过代码审计去挖掘 CSRF 漏洞,一般需要首先了解该开源程序的框架。CSRF 漏洞一般会在框架中存在防护方案,所以在审计 CSRF漏洞时,首先要熟悉框架对 CSRF 的防护方案,若没有防护方案,则以该框架编写的所有Web 程序都可能存在 CSRF 漏洞;若有防护方案,则可以首先去查看增删改请求中是否有 token、formtoken、csrf-token 等关键字,若有则可以进一步去通读该 Web程序对 CSRF 的防护源码,来判断其是否存在替换 token 值为自定义值并重复请求漏洞、重复使用 token 等漏洞。此外还要关注源程序是否对请求的 Referer 进行校验等。


2.对 Referer 过滤不严导致的 CSRF 漏洞

public class RefererInterceptor implements HandlerInterceptor {private boolean check = true;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 如果检查标志为 false,则直接放行if (!check) {return true;}// 获取请求的 Referer 头部信息String referer = request.getHeader("Referer");// 如果 Referer 存在并且以指定域名开头,则放行if (referer != null && referer.trim().startsWith("www.testdomain.com")) {return true;} else {// 否则,重定向到首页或其他页面request.getRequestDispatcher("index.jsp").forward(request, response);return false;}}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 在处理请求之后,渲染视图之前执行的操作}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,Exception ex) throws Exception {// 在完成整个请求之后,清理资源等}
}

这里逻辑判断的关键点在于第二步。该判断仅仅判断请求 Referer 字段是否以 www.testdomain.com 开头 ,若我们构建一个二级域名为 www.testdomain.com.hacker.com 的地址,则可能成功绕过该判断,从而进行 CSRF 攻击


3.token 可重用导致 CSRF 漏洞

public class CsrfTokenInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 生成服务器端的 CSRF 令牌String sToken = generateToken();// 获取请求参数中的 CSRF 令牌String pToken = request.getParameter("csrf-token");// 如果服务器端的令牌和请求参数中的令牌都不为空,并且它们相等,则放行if (sToken != null && pToken != null && sToken.equals(pToken)) {return true;} else {// 否则,重定向到首页或其他页面request.getRequestDispatcher("index.jsp").forward(request, response);return false;}}
}

在这段程序中,当用户登录成功后,首先通过 generateToken() 方法生成一个属于该用户的 token,然后将其保存在服务端,并且将其镶嵌到 HTML 页面中的<input>标签内。当用户提交操作的时候,程序会比对该标签的 token 值是否等于服务端的token 值,如果相等,则判断该操作是用户本人操作,而不是受到了 CSRF 攻击
其实这段源程序对于 CSRF 的防御机制是存在问题的。该段源程序在用户成功登录后,生成了唯一的令牌,直至该用户注销前,该 token 都是有效的。这就可能导致一个问题,如果这个 token 被盗用或者泄露,那么就可能导致CSRF 漏洞的发生


4.CSRF 漏洞的防御

1、当用户发送请求时,服务器端应用将 token 嵌入 HTML 表格中,并发送给客户端。客户端提交HTML 表格,会将令牌发送到服务端,令牌的验证是由服务端实行的,但也要保证 token 不可重用

2、检查 Referer 字段。HTTP 头中有一个 Referer 字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,一般情况下,Referer 字段应该与请求地址位于同一域名下。而如果是 CSRF 攻击传递来的请求,Referer 字段会是包含恶意攻击载荷的地址

3、验证码机制、自定义 http 请求头方式、Origin 字段等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-dialog设置el-head固定

0 效果 1 代码 ::v-deep .adTextDetailDialogClass .el-dialog__body{max-height: calc(100vh - 150px);overflow: auto;border-top:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf; } ::v-deep .adTextDetailDialogClass .el-dialog{position: fixed;height:fit-content;…

瑞芯微 rk3588 Linux系统备份还原 StepbyStep

1.系统备份 1.1 将瑞芯微平台嵌入式系统的root ssh 权限开通 step1:sudo vi /etc/ssh/sshd_config step2: 找到PermitRootLogin,把开关打开&#xff1a; PermitRootLogin yes step3:重启ssh服务 sudo systemctl restart sshd 1.2.使用瑞芯微的打包脚本把嵌入式系统系统打包 这…

通过钉钉卡片进行工单审批

我们通常通过钉钉机器人来发送通知&#xff0c;提醒审批人名下有待办工单需要处理。这种通知方式仅能提醒审批人到ITSM中处理&#xff0c;审批人需要打开电脑登陆平台处理&#xff0c;我们就考虑是否能有一种方式能够满足移动端审批&#xff1f; 这里我们可以使用ITSM的移动端版…

三十年前的一场篮球赛

高中时候&#xff0c;篮球是男同学最喜欢的运动。高一时&#xff0c;我们用班费买个篮球。那个篮球应该叫石球&#xff0c;一是因为它像石头一样硬&#xff0c;把我的手指头伤了好多次&#xff1b;二是它买回来后&#xff0c;一直到玩丢了&#xff0c;就没有打过气。后来打久了…

问题处理记录 | 表输出报错 Packet for query is too large (5,214,153 > 4,194,304).

这个错误是由于MySQL服务器接收到的查询数据包太大而引起的。具体来说&#xff0c;错误消息中提到的数据包大小为5,214,153字节&#xff0c;而MySQL服务器默认只接受最大为4,194,304字节的数据包。 要解决这个问题&#xff0c;你可以尝试通过修改MySQL服务器的配置来增大max_a…

Python图形界面(GUI)Tkinter笔记(六):用config对控件进行设置

想让代码更模块化、函数化、对象化,可使用"config()"方法设置标签控件或其它控件的参数。把需随时要修改的控件参数定义在“config()”方法里且把它封装在一个函数中,这时只需对这函数内的“config()”方法作出相应的修改即可,无需对主代码或全部代码重新修一遍。…

《小猫咪大城市》 48小时销量破40万套,一匹休闲游戏黑马诞生

易采游戏网5月13日消息&#xff0c;近日一款名为《小猫咪大城市》的游戏在Steam、Switch和Xbox平台上正式发售&#xff0c;凭借其独特的游戏设定和可爱的猫咪角色&#xff0c;迅速赢得了玩家们的喜爱。据官方宣布&#xff0c;游戏在发售后的短短48小时内&#xff0c;销量已经突…

【退役之重学Java】ThreadLocal

一、ThreadLocal 与 Synchronized 区别 ThreadLocal&#xff1a; 采用“以空间换时间”的方式&#xff0c;为每一个线程都提供了一份变量的副本&#xff0c;从而实现同时访问而互不干扰多线程中让每个线程之间的数据相互隔离 Synchronized 同步机制采用“以时间换空间”的方式…

经典文献阅读之--D-Map(无需射线投射的高分辨率激光雷达传感器的占据栅格地图)

0. 简介 占用地图是机器人系统中推理环境未知和已知区域的基本组成部分。《Occupancy Grid Mapping without Ray-Casting for High-resolution LiDAR Sensors》介绍了一种高分辨率LiDAR传感器的高效占用地图框架&#xff0c;称为D-Map。该框架引入了三个主要创新来解决占用地图…

jQuery中的ready()函数:优雅地处理页面加载事件

在前端开发中&#xff0c;精确控制JavaScript脚本的执行时机对于保证页面元素被正确操作至关重要。传统上&#xff0c;开发者依赖于原生JavaScript的window.onload事件来确保页面所有资源&#xff08;包括图片、脚本等&#xff09;加载完毕后再执行特定代码。然而&#xff0c;这…

信息化系统建设运维服务方案(投标)Word原件

《信息化系统运维服务方案》&#xff08;原件可获取&#xff09; 1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任…

ICode国际青少年编程竞赛- Python-2级训练场-坐标入门

ICode国际青少年编程竞赛- Python-2级训练场-坐标入门 1、 d Item.x - Dev.x Dev.step(d)2、 d Item.y - Dev.y Dev.step(d)3、 d Dev.y - Item.y Dev.step(d)4、 d Item[0].x - Dev.x Dev.step(d) Dev.step(-d) Dev.turnRight() d Item[1].y - Dev.y Dev.step(d)…

Jetson Orin NX L4T35.4.1平台自启动时间优化调试记录2

基于上一篇继续记录 Jetson Orin NX L4T35.4.1平台自启动时间优化调试记录1-CSDN博客 1. 测试UEFI 延时5s问题 [2024-03-19 11:51:04] L4TLauncher: Attempting Direct Boot [2024-03-19 11:51:09] EFI stub: Booting Linux Kernel... debug UEFI 在 11:51:04和11:51:09之…

电商数据接口|如何获取电商数据?

随着互联网的发展&#xff0c;电商的运营方式也逐渐数据化&#xff0c;在大数据的影响下&#xff0c;电商领域很大程度上改变了传统的运营模式。很多商家如今都非常重视数据&#xff0c;并将数据贯穿于整个店铺的运营之中。 那么&#xff0c;具体来说电商大数据有哪些妙用呢&a…

商务分析方法与工具(十):Python的趣味快捷-公司财务数据最炫酷可视化

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

Spring boot使用websocket实现在线聊天

maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

软件2班20240513

第三次作业 package com.yanyu;import java.sql.*; import java.util.ResourceBundle;public class JDBCTest01 {public static void main(String[] args) {ResourceBundle bundle ResourceBundle.getBundle("com/resources/db");// ctrl alt vString driver …

高端智能终端RK3399主板在配送机器人项目的应用,支持免费定制

基于高端智能终端主板IoT-3399E推出了系列配送机器人&#xff0c;面向各类线下门店的配送服务。配送机器人可实现智能识别、精准配送、自动避障、自主调度系统、语音播报、信息互动等功能&#xff0c;大幅提升服务效率&#xff0c;为消费者带来更加便捷、智能的服务体验。 核心…

MySQL删除篇

文章目录 deletetruncatedrop delete delete from product ; 使用场景&#xff1a;一般正常删除数据&#xff0c;可回滚&#xff0c;不删除表结构 truncate truncate table product;使用场景:快速清空表数据&#xff0c;不可回滚&#xff0c;不删除表结构 drop drop tabl…

RK3568/RK3588智慧校园AI盒子方案,电子班牌,出入口管制,数字化校园等,支持鸿蒙,支持免费定制

智慧校园解决方案基于物联网、人工智能等新兴技术&#xff0c;为师生构建智能化校园环境&#xff0c;涵盖了校园安全、智慧教室、考勤管理、智慧食堂等多个场景&#xff0c;从工作、学习到生活&#xff0c;带来更人性化、更便捷、更高效的服务。 方案架构 方案特点 全面感知校园…