index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html
![]()
本文深入探讨了Java Web应用架构的演变历程,从传统的MVC架构到前后端分离、微服务和容器化技术的发展。文章详细分析了这一演进过程中,前端框架(如React、Vue)、后端框架(如Spring)以及数据库操作框架(如MyBatis)如何影响SQL注入、XSS攻击、文件上传与WebShell、访问控制缺陷以及三方组件漏洞等典型Web应用漏洞的形态与利用方式。文章指出,虽然现代架构在一定程度上提升了基础安全性,但开发者安全意识并未同步增强,且安全测试难度加大,强调了金融IT从业人员提升安全意识和采取安全措施的重要性。
💻 **前后端分离与微服务架构重塑应用安全格局**:现代Java Web应用普遍采用前后端分离架构,将前端(SPA)与后端API解耦,并通过微服务进一步拆分大型单体应用。这种演变降低了传统MVC架构下前后端耦合导致的安全风险,但也带来了API接口安全、服务间通信安全等新挑战。容器化技术(Docker、Kubernetes)则为微服务提供了高效的部署和管理方案,进一步加速了应用迭代,但也可能引入新的配置安全风险。
💡 **开发框架与组件的“双刃剑”效应**:以Spring为代表的现代后端框架通过依赖注入等机制提高了开发效率和安全性,而React、Vue等前端框架通过原生API封装有效减少了XSS漏洞。ORM框架(MyBatis、Hibernate)的普及也显著缓解了SQL注入的风险。然而,开源组件(如fastjson、Log4j2)的广泛使用,使得组件安全成为Java应用安全的最大威胁,一旦组件存在漏洞,将直接影响上层应用,反序列化漏洞和Log4j2漏洞是典型例证。
⚠️ **典型Web漏洞态势变化与新风险**:SQL注入漏洞虽然在OWASP排名中有所下降,但通过模糊查询、动态排序等方式利用#{}占位符的绕过依然普遍,尤其在使用${}拼接SQL时风险尤为突出。XSS漏洞在前后端分离架构下大幅减少,但React的dangerouslySetInnerHTML和Vue的v-html等允许直接插入HTML的属性仍可能引发XSS。文件上传漏洞的威胁因前后端分离和SpringBoot内嵌Tomcat而减弱,但“内存马”等新型WebShell形式正在兴起。访问控制缺陷(如未授权访问、越权)风险显著上升,成为OWASP Top 10的首位,主要源于API接口权限校验不严和三方组件(如Swagger、Druid)配置不当。
🚀 **安全意识与测试难度需同步提升**:尽管现代技术栈在一定程度上提升了应用系统的基础安全性,但开发者对安全漏洞的认识并未同步增强,例如在SQL注入的特定场景下仍易出错。同时,现代应用架构的复杂性使得漏洞挖掘难度加大,传统的漏洞扫描器效果减弱,对安全测试人员的代码能力和对Log4j2等组件漏洞的理解提出了更高要求。
原创 国联证券 2025-07-29 08:45 上海
理解漏洞

摘 要:信息系统是证券公司实现数字化转型的重要抓手和显性成果,软件架构是系统建设的基础,不断迭代发展的同时又时刻面临安全风险的挑战。本文介绍了基于Java语言的现代Web应用架构演化和开发技术发展,尝试从安全角度分析上述变化对SQL注入、XSS等典型Web应用漏洞的影响,帮助IT从业人员理解漏洞成因,总结当前应用安全现状,为防御漏洞风险提供思路。
关键词:Java Web;开发架构;应用漏洞;金融科技 随着金融科技发展,证券公司数字化转型进入快车道,证监会等监管单位不断出台各项指导意见及规定,要求证券公司保障充足的信息技术投入,加大IT系统建设,持续加快数字化转型[1]。信息系统作为数字化转型的重要抓手和显性成果,在技术发展下呈现出一些自有特点,如B/S模式成为系统架构主流,DevOps敏捷开发逐步推广,Java占据Web应用开发语言的主导地位等。对近年来笔者所在单位(以下简称“单位”)新上线业务系统进行开发语言统计,百分之八九十为Java开发,特别是恒生电子、金证、顶点等行业供应商提供的集中交易、风控、开户见证等证券业务系统,均是Java应用。以恒生电子公司为例,其新一代UF3.0集中交易系统、O45资管交易系统便是基于由Java语言实现的JRES 3.0技术平台进行开发,一定程度上可以认为Java Web应用的安全性直接决定了券商行业信息系统安全性的整体水平。分析信息系统开发和架构发展,研究应用安全漏洞变化,对保障证券公司网络信息安全有着重要意义。(一) 应用架构1. 前后端分离近年来新开发的Java Web应用系统,逐步从传统的MVC单体应用架构全面转向前端以SPA单页面为主,后端以提供API接口为主的前后端分离架构[2]。在MVC架构模式下,HTML、JavaScript等前端代码与后端Java代码耦合,需要一同被部署在Tomcat或WebLogic等应用容器内,由后端服务最终输出JSP页面展示在浏览器上。而随着Ajax技术的兴起,前端可以不再依赖于后端便可异步刷新页面,后端通过HTTP接口提供数据服务,前端请求后端接口获取数据并进行页面渲染,前后端仅需要事先约定传输的数据字段和类型等信息,便可各自完成系统开发,实现了前端代码和后端代码的解耦。2. 微服务而前后端分离架构的流行,也催生了后端微服务化这种软件系统架构。微服务主要是针对应用后端的一种软件开发架构和组织方法,它将原来依赖关系复杂、不同应用和数据之间互相耦合的大型单体应用拆分为一个个独立的小服务单元,每个服务运行在自己的进程中,完成单一职责,服务之间通过明确定义的API进行通信,从而满足业务快速变化及分布式多团队并行开发的需求。3. 容器化由于微服务架构需要构建、测试、部署、运行数十个独立的微小服务,带来环境配置多样、版本管理困难、运维监控复杂等新的问题,所以以Docker和Kubernetes为代表的容器化技术,将应用标准化为可管理、可测试、易迁移的容器镜像,天然适合Java语言下的微服务架构系统,契合快速迭代的开发需求。(二)开发框架开发框架的安全性直接关系到应用系统的安全性,2012年爆发的Struts2命令执行漏洞,便是出现在Java后端开发框架上,Struts2是由Apache基金会开源的一个在MVC时期最为流行的开发框架,以Struts为关键字在乌云检索,漏洞记录高达1043条(见图1)。本文主要站在前后端分离应用架构的角度,将Java Web系统的开发框架主要分为前端框架、后端框架与数据库操作框架。图1Struts2漏洞1. 前端框架Web应用系统的展示层主要是HTML、JavaScript、CSS等文件构成,由浏览器最终渲染成用户可以浏览的页面,在MVC时期,应用最广的是以jQuery为代表的DOM方法库和Element UI等组件库,到了前后端分离时期,出现了以React、Vue和Angular为代表的三大前端框架,通过响应式、虚拟DOM等方式,将前端开发工程化、标准化,这些前端框架的广泛利用也极大减少了XSS漏洞的出现。2. 后端框架相对于前端框架的多样性,Java Web的后端框架已经发展到较为成熟的时期,Struts2等框架逐步面临淘汰。根据2020年VMWare发布的一项调查报告显示,使用Spring进行开发的应用比例占到86%。Spring家族技术栈包括Spring Framework、Spirng Boot、Spring Cloud、Spring Security等一系列开发技术框架,极大提升了Java开发的效率与安全性,Spring架构的核心是通过依赖注入和控制反转,将实例对象交由Spring容器管理,实现代码解耦。3. 数据库操作框架通常Java应用连接操作数据库需要通过JDBC接口,具体的实现由各个数据库厂商提供符合JDBC接口的数据库驱动来完成。由于JDBC存在连接池创建释放频繁、SQL语句硬编码等问题,又出现了数据库操作框架ORM,ORM框架的实质是对JDBC进行了一层封装,通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。当前主流的ORM框架有MyBatis、Hibernate和JPA,ORM框架在应对SQL注入漏洞方面提供了极大的帮助。(三)组件1. 代码组件可以说Java从诞生开始,便是建立在开源生态基础上的,Web框架Spring、JSON序列化库fastjson、日志框架Log4j2、安全认证框架Shiro等,无不是开源项目,开源代码组件的使用,可以让开发者关注于业务代码,而不必关心底层实现。但由于Java Web应用大量依赖这些底层代码组件,代码组件的安全性决定了上层Java Web应用的安全性,可以说代码组件安全已经成为Java安全领域第一大威胁。2015年公布的Apache Commons反序列化漏洞,打开了Java安全的潘多拉魔盒,直接影响了WebLogic、WebSphere、JBoss等应用容器的安全性,2021年的Log4j2远程代码执行漏洞,也影响了Strust2、Solr、ElasticSearch等数千个上层组件的安全。2. 容器组件由于Java Web应用架构的演化,SpringBoot框架的大范围使用,应用容器的选择也发生了巨大的变化。MVC时期Java Web项目一般被整体打包为jar或war包,发布在Tomcat或WebLogic等应用容器上,而在前后端分离架构下,前端被剥离单独部署在Nginx等Web容器上,SpringBoot框架封装了Tomcat容器,使得后端项目可以以jar包的形式直接运行,无需开发者另行部署应用容器,这一结果也导致WebLogic、 WebSphere等容器的使用大大减少。以上Java Web应用技术栈的演化,影响了如SQL注入、XSS等典型Web漏洞在Java Web应用程序上的展现形式与利用方式,不同类型的漏洞出现的概率相较于传统单体应用同样出现了变化,本文例举了五类Web漏洞,对这些漏洞的发展趋势进行分析。(一)SQL注入SQL注入漏洞是将SQL语句插入到应用的输入参数中,到达数据库解析执行,返回语句执行结果[3]。攻击者通过SQL注入漏洞可以执行非预期的命令或者获取到不受程序控制的敏感数据,根据OWASP Top 10-2021版的排名,注入漏洞(注:2021版注入漏洞合并了XSS漏洞,本文特指SQL注入)位列第三位,在2017版中该类型漏洞排名第一。Java应用使用JDBC的Statement对象用于执行静态SQL语句并返回生成的结果,当输入参数可控时,攻击者可构造带有危害的SQL语句插入到参数中执行,以下列存在漏洞的代码段为例,当user参数构造为admin’or‘a’=‘a这一字符串,就可以正确闭合SQL语句,绕过password字段的校验查询出admin账户的数据。Java提供了PreperedStatement对象,它的功能是将SQL语句进行预编译,故在查询时外部输入参数将不会被再次编译执行,从而防止了SQL注入漏洞。
注入漏洞在OWASP排名下降的原因,笔者认为可能与数据库操作框架的大范围使用有关。以MyBatis框架为例,在使用MyBatis框架编写SQL查询语句时,需要使用#{}占位符接收参数,用于解析占位符的类为 GenericTokenParser,它的底层真正实现是PreperedStatement对象,所以在MyBatis中用#{}可以防止SQL注入。但对2022年的渗透测试、上线测试等安全测试结果进行分析统计,SQL注入漏洞被发现的比例仍然高达39%,数量似乎没有减少。对SQL注入漏洞点进一步定位分析,发现漏洞主要发生在模糊查询、动态排序、数组参数查询等处,如果开发者在这些SQL处直接使用#{}占位符,会导致MyBatisSQL执行出错,所以开发者会直接使用${},这在底层属于直接拼接参数的写法,导致漏洞被触发。(二)XSS攻击XSS攻击是将JavaScript代码插入到网页中,当用户浏览包含有这些JS代码的页面时,浏览器便会执行JS脚本的一种攻击方法,这些JS代码通常含有盗取Cookie的功能,从而盗取用户身份。在单位近三年的Web应用安全测试项目中,仅发现一例XSS漏洞,XSS漏洞出现概率呈现逐年下降的趋势异常明显,这一变化与前后端分离、三大前端框架的流行有密切关系。在React或Vue框架中,框架会自动使用textContent、setAttribute等浏览器原生API,完成HTML渲染或数据绑定,即使攻击者提交了带有<script>标签的数据,转义函数也会把特殊字符转义成字符实体,以避免其被浏览器解析为HTML标签,防止了XSS攻击。
虽然前端框架帮助开发者解决了绝大多数XSS漏洞,但并不代表XSS攻击不会在框架上出现。React的dangerouslySetInnerHTML和Vue的v-html标签属性,均可以实现将字符串处理为HTML文档并渲染到页面的功能,这些指令在底层调用的是innerHTML方法,一旦开发者在框架中使用了这些指令,同样会引发XSS漏洞(如图2)。图2Vue XSS(三)文件上传与WebShell文件上传漏洞一般指应用程序在上传功能点未对用户上传的文件类型进行检查,导致攻击者可以上传经过特殊构造的脚本文件,在服务端执行,这些脚本文件通常会具备文件管理、目录浏览、命令执行等功能,可以直接控制和修改应用,又称为WebShell,在Java Web应用中主要是JSP格式文件。对于MVC架构的单体应用,由于静态资源和后端代码耦合,Tomcat或WebLogic等应用容器需要负责同时解析静态和动态资源,当攻击者上传一个JSP文件时,应用容器会将JSP页面编译成为Servlet执行。
Java Web的前后端分离架构与SpringBoot框架影响了文件上传漏洞利用和WebShell的形式,一方面静态资源被分离出来单独部署在Nginx等Web容器上,再通过反向代理方式请求后端接口,用户上传的图片或文档被保存在Web服务器上,即使成功上传JSP格式文件也无法被Nginx解析;另一方面,虽然SpringBoot框架支持JSP,但Spring官方并不推荐开发者使用,若要支持JSP需要引入额外依赖,在默认配置下JSP文件被上传至服务端无法被SpringBoot框架内嵌的Tomcat解析,可以说在前后端分离架构下,JSP被使用的必要性大大降低。虽然现代应用面对文件上传攻击的威胁正在减弱,但不代表WebShell就此消失,由于反序列化漏洞、Log4j2漏洞的影响,无文件式“内存马”成为获取应用权限的主要方式,Java的反射、Java Agent等动态特性,使得攻击者可以动态修改或者生成具备特殊功能的class。(四)访问控制缺陷访问控制缺陷风险在OWASP Top 10的排名从2017版的第五位上升至2021版的第一位,可见在现代应用架构下,此类风险出现的概率正在变高和更为容易。访问控制缺陷漏洞发生的原因包括应用系统自身的权限设计缺陷、中间件配置错误、不安全的会话管理等。本文主要从应用权限和组件配置两方面分析导致访问控制缺陷风险排名上升的原因。
1)应用系统自身权限设计缺陷。因应用系统自身权限设计缺陷导致的漏洞主要表现为未授权访问、水平越权和垂直越权[4],如无需登录便可调用敏感API获取系统数据;获取不属于当前登录用户的其他用户数据;普通权限用户向上获取管理员权限用户的数据等。在前后端分离架构下,后端服务通常被设计为API接口的形式,一个应用系统可能拥有多达上百个API,这些API若未配置权限校验或权限校验逻辑被绕过,就容易出现漏洞。2)组件配置错误。根据前文所述,Java Web应用会引用大量的三方组件来帮助开发和监控应用,部分三方组件带有Web UI形式的管理控制台,如果未对管理控制台配置身份认证,攻击者可以未授权访问这些三方组件,获取系统信息甚至执行非法操作,典型的有SwaggerAPI、Spring Actuator、Druid等组件未授权访问。(五)三方组件漏洞本文将不是应用系统开发者自行编写,而是通过POM文件等方式引入的依赖称为三方组件,如使用SpringBoot框架需要引入spring-boot-starter-web就是一个三方组件。三方组件漏洞意味着依赖它的上层应用同样面临漏洞威胁,这一漏洞依赖关系在大量使用开源代码的Java Web应用上体现的更为明显,本文以Java反序列化漏洞为例进行说明。
Apache Commons Collections是一个扩展了Java标准库里的集合结构的第三方基础库,提供了很多强有力的数据结构类型并实现了各种集合工具类,被广泛运用于各种Java应用的开发。2015年Commons Collections库被发现存在反序列化漏洞[5],间接影响了许多应用容器的安全性。WebLogic的T3协议是应用容器用来实现RMI调用时的通信协议,通过序列化数据传输方式,远程调用另一台JVM虚拟机中对象上的方法,如图3所示,攻击者向WebLogic的HTTP通信端口发送含有恶意类的T3协议数据,WebLogic的resolveClass方法会直接执行恶意类的readObject方法,触发Commons Collections利用链实现远程命令执行。分析WebLogic10.3.6的安装文件会发现其modules文件夹存在名称为com.bea.core.apache.commons.collections_3.2.0jar包,说明WebLogic10.3.6使用了CommonsCollections库。
图3CVE-2015-4852漏洞原理本文主要介绍了基于Java语言的现代应用架构演化和开发技术发展,并分析了以上变化对典型Web应用漏洞的影响,笔者认为有以下三点现状值得思考:
1)应用系统基础安全性得到提升。得益于底层框架带来的安全机制,现代应用系统安全性相比传统应用有了一些提升,漏洞点更为隐蔽,随处都是SQL注入、XSS等通用漏洞的情况有所改善,风险逐渐转向业务逻辑漏洞;2)开发者安全意识没有增强。开发框架虽然帮助开发者更容易地开发出更为安全的系统,但并没有让开发者的安全意识得到提高,相反可能影响了开发者对安全漏洞的认识,SQL注入漏洞位置的改变证明一旦失去框架的安全机制,开发者仍然容易写出存在漏洞的代码;3)安全测试难度变大。面对现代应用,漏洞挖掘变得困难,原有的一些攻击手法可能失效,简单使用漏洞扫描器无法轻易获得漏洞结果,Log4j2等组件漏洞的流行对安全测试人员的代码能力提出更高要求。
作为金融IT从业人员,应当了解上述现状,提升安全意识并采取安全措施,才能在数字化转型中从容应对安全挑战。
参考文献:温思雅.证券公司数字化转型中的业务与IT融合问题研究[N],证券机构数字化转型与证券科技创新,2020杜艳美,黄晓芳.面向企业级web应用的前后端分离开发模式及实践[J],西南科技大学学报,2018基于攻击反馈模型的SQL注入漏洞渗透测试方法[J],计算机应用与软件,2023韦峻峰,李耀文.API接口安全运营研究[J],邮电设计技术,2023巫俊杰.Java反序列化漏洞挖掘与攻击检测方法研究[D],北京邮电大学,2022
赵川,国联证券信息安全高级工程师,CISA,研究方向包括数据分析、应用开发安全、安全运营。
严星宇,国联证券综合及安全负责人,主要研究领域包括金融科技、安全体系、商密应用等。
证券行业自身低时延的业务要求以及业务中断的敏感性给安全防护带来了很大的挑战。专刊汇集了证券基金期货行业网络安全防护的最新经验、成果和解决方案,为大家分享一线安全规划、运营、建设的心得和实践经验。

安全村始终致力于为安全人服务,通过博客、文集、专刊、沙龙等形态,交流最新的技术和资讯,增强互动与合作,与行业人员共同建设协同生态。
投稿邮箱:info@sec-un.org
阅读原文
跳转微信打开