应用云平台的可用性——从新浪SAE看云平台设计
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Ryan Slobojan 译者 张龙 发布于 2008年7月20日
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”属性。关于如何在主要的控制器实现中完成这些操作,可以参考下面这个例子:为了避免ModelView注入的发生,千万不要让客户端自行选择视图。视图的选择应当由服务器端来决定。
- 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)方法以配置每个页面允许的属性集
Ounce又说他们相信其它很多框架也面临着类似的风险:
只要框架允许自动绑定或者用户可以控制应用的业务处理,那么应用都有可能存在上面提到的两个问题。我在客户编写的框架中就看到了类似的漏洞,在最近关注的一个Ruby on Rails应用中,也发现了同样的问题。产生这些问题的原因在于,设计这些框架的初衷是简化应用的开发,帮助开发者减少代码的编写量。但如果这些框架无法让简单和安全(框架默认的设置环境所保证的安全)齐头并进的话,我们最后得到的将是大量容易编写但并不安全的应用。
查看英文原文:Security Advisory Issued for Spring MVC
译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011。
篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。
随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。
4 条回复
关注此讨论 回复