InfoQ

新闻

安全框架HDIV 2.0:现支持与Spring MVC和JSTL的集成

作者 Ryan Slobojan译者 胡键 发布于 2007年9月20日 上午12时30分

社区
Java
主题
开放源代码,
Web框架,
安全
标签
Struts,
Spring框架,
HDIV,
JSF

开源Web应用安全框架HDIV最近发布了2.0版。为了解更多关于此次发布的情况,InfoQ采访了HDIV项目领队Roberto Velasco Sarasola。

Sarasola将HDIV描述为Java Web应用安全框架,它旨在防止绝大多数常见的Web应用攻击,如SQL注入、跨站点脚本和参数篡改。HDIV假定任何远程HTTP客户端请求都会成为攻击媒介,并着手验证请求不是某种类型的攻击——这意味着要解决存在于现有应用框架中验证策略的缺口:

当前Web框架提供了一些验证功能,但是大多数时候它们不足以覆盖常用验证的需要。例如,在你的Web应用中有一个这样的链接http://www.myhost.com/action1.do?account=56,访问帐号为56的信息,你如何保证客户端不会更改这个值去访问其他人的帐号,如account=40?

使用标准安全验证器(validator)(更适合用于可编辑数据验证),不可能检查这种情况,你需要自定义验证。例如,在HttpSession中包含帐号id或在数据库中执行的SQL里使用用户标识。这种安全问题,被认为是实例级别的安全,它非常难以解决。因为,在一个Web应用中,有成千上万条相似的请求需要被验证。

以下是Sarasola描述的HDIV所提供的抵御这些攻击种类的能力:

  • 数据完整性——为了防止参数篡改,HDIV保证任何服务器产生的、只读数据(如隐藏域)不能被客户端修改。
  • 可编辑数据验证——为了去除跨站点脚本和SQL注入攻击,HDIV分析所有的可编辑数据域。
  • 数据保密——通过混淆参数名称和值,HDIV加密了不可编辑数据,这样防止了内部数据(如列名或Web目录名)暴露给客户端。
  • 详细的攻击日志——HDIV记录它检测到的每次攻击的信息,信息包括:URL、用户名、IP地址和攻击类型。

HDIV通过自定义JSP标签与Java Web应用集成,标签用来替换普通的链接和Form标签。在应用的web.xml中插入一个HDIV Web过滤器,这样将对每个请求自动执行验证。在以前版本中,HDIV支持Struts 1.xStruts 2.x,而本次发布现在也支持Spring MVC 2.0JSTL。对这些新框架的支持是靠扩展Spring和JSTL标签本身并在其中加入HDIV功能做到的——为了支持它们,对核心HDIV库和Web过滤器都不需要做任何改动。同样,既然Spring和Struts都是基于Action的框架,在HDIV看来,它们非常相似——Sarasola说最大的挑战是扩展框架标签本身,因为标签上定义的扩展点非常糟糕或者压根儿就不存在。他也表示期望框架开发者能对标签增加定义良好的扩展点,以使得其他框架的开发者可以更加容易的集成它们。

Sarasola还被问到了对于HDIV的后续打算,他描述了一个针对Webflow集成的计划:

目前HDIV支持3种状态管理策略。就内存和哈希(memory and hash)策略来说,HDIV为每个可能在JSP中被处理的请求(每个链接或Form之一)在服务器端保存一个对象(状态)。有趣的是,从伸缩性的观点来看,它限制了服务器端的缓存大小。在当前的发布中,可以定义一个最大缓存大小,但是很多时候很难定义一个合适大小的缓存,因为这依赖于应用。

我们考虑用Webflow来解决这个问题 ,因为它提供了一种逻辑划分客户端导航的方法。这样,HDIV将使用Webflow监听器的功能来决定何时从缓存删除对象。

另一个有趣的特性是,利用自定义标签,HDIV给每个链接或Form自动加上了webflow execution key。现在,在Struts、Struts 2和Spring MVC应用中,我们不得不手动增加这个id,我们非常高兴能让这个任务自动起来。

同时,他还指出对于WebWorkStripesJSF的支持也在计划之列。

查看英文原文:HDIV 2.0: Security framework now integrates with Spring MVC and JSTL

相关赞助商

InfoQ中文站Java社区,关注企业Java社区的变化与创新,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Java技术社区提供一流资讯。

没有回复

回复

独家内容

运用Ruby纤程进行异步I/O:NeverBlock和Revactor

Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

与杨巍一起探讨OpenSocial

InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。

使用ClickOnce细分发布版本

ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。