在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:273733
用户头像

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

关注

评论

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

如何在Python中使用免费的DeepL翻译API

幂简集成

Python 翻译 API 免费API

数据驱动决策:观测云在企业战略中的作用

可观测技术

数据结构

实时监控的力量:观测云如何提升业务响应速度

可观测技术

实时监控

Mobpush 标签推送

MobTech袤博科技

网络安全警钟:Windows TCP/IP协议出现高危漏洞

郑州埃文科技

TCP IP 漏洞

一次JVM GC长暂停的排查过程

京东科技开发者

数据安全与合规性:观测云在保护企业数据中的角色

可观测技术

数据安全

AI+仿真,助力工业智能化变革:面向仿真工程师的机器学习工具

Altair RapidMiner

人工智能 AI 设计 仿真 altair

智源千万级指令微调数据集Infinity-Instruct持续迭代,Llama3.1仅微调即可接近GPT-4

智源研究院

高效!实用!还免费!八爪鱼RPA应用市场上线啦!

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

Dubbo源码浅析(一)—RPC框架与Dubbo

京东科技开发者

Go 语言 viper 库上手实践

FunTester

AI 流媒体音乐平台 Melodio 发布;多模态模型 VITA 可打断无需唤醒词丨 RTE 开发者日报

RTE开发者社区

别再被坑了! JavaScript类型检测的最佳实践

Immerse

JavaScript 数据结构 数据类型

10分钟构建Web 应用防火墙-uuWAF

coxi_vv

开源 waf 1Panel

10分钟构建服务监控工具

coxi_vv

监控 Prometheus 1Panel

10分钟构建运维安全审计系统

coxi_vv

开源 运维 1Panel jumpserver

代理IP为什么很难达到100%的利用率?

IPIDEA全球HTTP

【后台体验】运营后台订单详情设计分享

京东科技开发者

案例分享 | 八爪鱼RPA在社区医疗流程自动化系统中的应用

八爪鱼采集器︱RPA机器人

RPA 自动化 流程

PromQL:观测云中的监控数据分析利器

可观测技术

数据分析

用户体验的优化:观测云在用户行为分析中的应用

可观测技术

用户体验

每个Moka招聘系统用户都需要一套八爪鱼RPA

八爪鱼采集器︱RPA机器人

RPA 自动化 招聘 智能化

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