开源Java框架带来的应用安全风险
2013-07-16 TechTarget中国 编辑:曾少宁
Java安全风险是重所周知的,但是您是否了解一些开源Java框架的安全问题呢?例如,Struts、Hibernate、JavaEE。哪一个框架最安全,又有哪些措施可以提高它们的安全性?
只要开发者认真学习,许多开源Java框架都可以帮助完成应用开发。框架可以提高开发者生产力,但是大多数人都必须经过足够的学习过程,才能发挥框架的真正作用。CAST最近发布了一份报告,其中显示最流行的开源Java框架是Struts、JavaEE、Hibernate和Spring。然而,没有一种框架提供了足够的安全性,或者保证完美无瑕的代码。
为了寻找最安全的框架,CAST调查了496个应用程序的1.52亿行代码,结果发现最大的问题是,大部分应用实际上都有错误配置。我并不确定这些统计结果是否可以推断出其他一些调查结果,但是这个结果突出了培训的重要性,只有通过培训才能让开发者知道如何正确使用所选择的框架。
任何应用开发的计划阶段都应该确定一组特定的安全需求,如身份验证、授权和加密方式,使开发团队能够选择最适合这些需求的框架。而且,有可能需要使用多个框架才能支持所有需求,但是这样可能增加应用程序的整合难度。
我个人认为,使用好的框架确实可以提高编码质量和减少Bug数量。CAST报告显示,不使用任何框架的应用程序会出现各种质量问题。影响框架选择的其他因素包括文档质量,特别是安全API的文档,因为它们可能非常复杂,显然有严格的使用要求。另一个问题是框架用户社区的响应速度,因为这是获取帮助和支持的重要来源。
要提高框架安全性,有时需要修改其他人的代码,而这是非常难的。他们发布的任何更新或补丁都可能覆盖您所作的修改,或者影响它们的行为。如果您发现它很重要,那么必须检查所有处理用户输入及应用入口的代码。输入是否有效?是否处理了所有特殊字符或特殊值?如果没有,那么您必须自己增加验证和过滤功能,保证传递到应用程序的数据一定是安全的。
在使用任何第三方代码或应用程序时,您必须紧跟供应商或Bug列表,及时了解所有安全警报。例如,Aspect Security的研究人员发现,Spring框架的“表达式语言”功能有一个缺陷,它允许执行远程代码,可能完全破坏相应用程序。这个问题很难解决,目前的建议是关闭表达式语言特性。如果开发者不了解这些漏洞,那么他们的应用程序就有可能无法避免这些攻击。开发团队应该有一位成员负责跟踪编程语言及开发工具的安全更新,而且他要知道如何处理警报和重要补丁更新。