NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Spring MVC 的安全隐患及建议

  • 2008-07-20
  • 本文字数:1679 字

    阅读完需:约 6 分钟

Ounce 实验室近日提出了与 Spring MVC 相关的两个潜在安全问题。这两个问题会影响到使用 Spring MVC 构建的应用,其产生的原因都与服务器端对客户端参数的处理有关。InfoQ 深入分析了这两个问题并与 Ounce 实验室展开了一番讨论。

Ounce 实验室的官方发布中这样描述这两个问题:

这些新发现的安全漏洞和一般被跨站点脚本(cross site scripting,即 XSS)或 SQL 注入攻击利用的漏洞不同,它们并不是 Spring 框架内部的安全漏洞,而是应用设计上的问题。如果应用没有恰当的设计和实现,那么就有可能暴露自身的核心业务应用,并被攻击者利用。如果开发者在使用 Spring 框架设计和测试应用的时候头脑中能对安全问题有个清楚且正确的认识的话,企业应用在部署之后也就不会那么容易遭到攻击了。

接着,Ounce 逐一剖析了这两个漏洞:

首先涉及的是数据绑定过程。Spring MVC 有这样一个特性:可以直接将表单中提交的字段自动传递到代表对象模型的 java beans。这个特性本身没有什么问题,但当你使用同一个 bean 来维护多个表单及数据(提交这些数据的表单是不同的)时问题就产生了。举个例子,比方说你有一个代表用户账户的 bean,而你的 web 应用有两个不同的表单会更新该 bean,其中一个表单用来创建新帐户,另一个用来更新已有帐户,那么攻击者就有可能“借”更新帐户的表单的“手”去修改另一个用户的帐户。第二个安全漏洞与攻击者借助用户可管理数据来控制业务流程有关。在安全领域中,人们在用户数据的验证方面投入了很到的精力,以此来防止恶意的脚本内容或者 SQL 注入攻击,然而如果用户可管理数据可以被用来控制业务流程的话,那么这些数据也必须通过验证。再举个例子,有一个使用 Spring MVC 构建的交易应用,这个应用中有三个独立的控制器:一个处理新交易请求;另一个处理交易请求验证;还有一个处理交易执行。一旦该交易流程中存在某个点,用户在这点上能操纵控制器随意将请求发送到的非既定的“视图”,那么这个业务流程就存在被扰乱的可能。如果正常交易流程被扰乱,最后执行的则会是未经验证的交易。

SpringSource 的安全咨询部门也详细分析了这些问题并给出了修复这些问题的方案:

为了防止 _ 数据提交到不可编辑的字段 _ 的情况发生,我们应该在显示配置 DataBinder 的过程中声明允许绑定的字段,这需要设置应用中每个 DataBinder 实例的“allowedFields”属性。关于如何在主要的控制器实现中完成这些操作,可以参考下面这个例子: - SimpleFormController——覆写 initBinder(HttpServletRequest, ServletRequestDataBinder) 方法,并调用 ServletRequestDataBinder 实例的 setAllowedFields(String[]) 方法

  • MultiActionController——在处理器的方法体中调用你创建的任何 ServltRequestDataBinder 实例的 setAllowedFields 方法
  • @Controller——使用 @InitBinder 注解将 WebDataBinder 显式注入到配置它的方法中。调用 setAllowedFields(String []) 方法限制该控制器类所允许的属性。如果各个处理方法对应不同的 allowedFields 值的话,可以通过 @InitBinder 注解的方法接收 HttpServletRequest,并取消当前的请求映射
  • AbstractWizardFormController——覆写 initBinder(HttpServletRequest, ServletRequestDataBinder) 并调用 DataBinder 实例的 setAllowedFields(String[]) 方法。调用 getCurrentPage(HttpServletRequest) 方法以配置每个页面允许的属性集

为了避免 _ModelView 注入 _ 的发生,千万不要让客户端自行选择视图。视图的选择应当由服务器端来决定。

Ounce 又说他们相信其它很多框架也面临着类似的风险:

只要框架允许自动绑定或者用户可以控制应用的业务处理,那么应用都有可能存在上面提到的两个问题。我在客户编写的框架中就看到了类似的漏洞,在最近关注的一个 Ruby on Rails 应用中,也发现了同样的问题。产生这些问题的原因在于,设计这些框架的初衷是简化应用的开发,帮助开发者减少代码的编写量。但如果这些框架无法让简单和安全(框架默认的设置环境所保证的安全)齐头并进的话,我们最后得到的将是大量容易编写但并不安全的应用。

查看英文原文: Security Advisory Issued for Spring MVC

2008-07-20 08:273507
用户头像

发布了 88 篇内容, 共 258.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Spring中事务嵌套使用一定得警惕这个问题了!

Java你猿哥

spring SSM框架 spring cloud

ShareSDK第三方平台注册指南

MobTech袤博科技

从应用看火山引擎AB测试(DataTester)的最佳实践

字节跳动数据平台

AB testing实战 A/B测试 企业号 4 月 PK 榜 对比试验

无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

CDP实操篇03:自检清单,您的企业适合实施CDP吗?

游读分享

太强了,全面解析缓存应用经典问题

架构精进之路

缓存 后端 Redis 核心技术与实战 三周年连更

不同编程语言的程序,能够被 ChatGPT 自动生成的可能性的一些思考

Jerry Wang

人工智能 神经网络 机器学习 深度学习 三周年连更

一篇文章学透ApplicationContext

小小怪下士

Java spring 程序员

localedef 生成本地化文件遇到的问题

程序员与厨子

Linux Shell 信创 openEuler

财联社专访 | 澜舟科技周明:大模型的落地场景是关键,B端市场是应用富矿

澜舟孟子开源社区

大模型 认知智能 AIGC 澜舟科技

多线程如何实现事务回滚?一招帮你搞定!

Java你猿哥

Java 多线程 子线程

快速上手Amazon SageMaker动手实验室

指剑

AI AWS Stable Diffusion Amazon SageMaker

又一巅峰神作!14年工作经验大佬出品“JVM&G1 GC深入学习手册”

Java你猿哥

Java JVM SSM框架 jvm调优 G1垃圾回收器

为什么说得帆的CRM是低代码PaaS赛道最好的CRM?

得帆信息

低代码 CRM 低代码平台

“烧钱”的大模型:初探成本拆解与推理优化方法

Baihai IDP

人工智能 深度学习 大模型 LLM 企业号 4 月 PK 榜

连续仨月霸占牛客榜首!京东T8呕心巨作:700页JVM虚拟机实战手册

Java你猿哥

Java JVM ssm 虚拟机 SSM框架

如何科学判断研发团队是否在健康工作?(内附量表)

LigaAI

研发管理 技术管理 敏捷度量 企业号 4 月 PK 榜 研发效能管理

MySQL 移动数据目录后启动失败

GreatSQL

人机识别技术再升级,AIGC为验证码带来万亿种变化

Geek_2d6073

一文讲透产品经理如何用好ChatGPT

京东科技开发者

人工智能 产品经理 GPT-4 企业号 4 月 PK 榜

一文带你搞定Maven全功能

Java你猿哥

Java maven ssm 生命周期 Maven仓库

微服务 - 搭建Consul集群服务,Consul配置中心

Java你猿哥

Java 架构 微服务 ssm

视频剪辑调色:达芬奇DaVinci Resolve Studio 18 Mac版

真大的脸盆

Mac 视频剪辑 Mac 软件 视频调色 视频剪辑调色软件

开放原子全球开源峰会,全面升级再出发!

开放原子开源基金会

开源 软件 创新 峰会 全球

【Linux】iptables之防火墙的应用及案例、策略、备份与还原(2)

A-刘晨阳

Linux iptables 防火墙规则 三周年连更

eBPF的发展演进---从石器时代到成为神(一)

统信软件

Linux 内核 Linux内核

华为云GaussDB支撑华为MetaERP系统全面替换

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Spring中事务嵌套使用一定得警惕这个问题了

做梦都在改BUG

Java spring 事务

一文读懂火山引擎数智平台VeDI新品——管理驾驶舱Plus

字节跳动数据平台

企业管理 实时决策 企业号 4 月 PK 榜

太强了!京东架构师独家微服务笔记,啃完直入字节

做梦都在改BUG

Java 架构 微服务 Spring Cloud

使用MASA全家桶从零开始搭建IoT平台(一)环境准备

MASA技术团队

.net IoT MASA

Spring MVC的安全隐患及建议_Java_Ryan Slobojan_InfoQ精选文章