当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Web框架:Struts中的ActionForm 作为防火墙

Web框架
Web框架介绍---SpringMVC
基于Django框架的敏捷Web开发
驾驭新的Ruby Web框架Waves
JAVA脚本取得struts2 OgnlValueStack中的值
Struts中DownloadAction的使用
优化Hibernate性能的几点建议
Hibernate高级查询实战
对于Struts和Spring两种MVC框架的比较
JSF与Struts的比较 超易懂!
hibernate 主键生成方式
spring acegi 官方例子
获取ApplicationContext的几种方式
Spring与自动调度任务 基于Timer的任务调度器的应用
spring+hibernate 的包的详解,帮你了解每个包的作用以及是否必要导入工程
hibernate 一对一(one to one)级联保存
struts formbean 就是鸡肋
Struts中常用的几种Action
spring的应用事例
struts2(一)
struts2(二)

Web框架:Struts中的ActionForm 作为防火墙


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 258 ::
收藏到网摘: n/a

当请求提交时,ActionServlet 使用一个自动组装机制来从请求参数中设置请求的

ActionForm属性。这使得你可以通过控制哪个ActionForm 属性被暴露的方式来控制哪个

请求参数是可接受的。这也意味着如果你的ActionForm 的粗心设计,你可能失去控制哪个

参数可以接受的能力。ActionForm 一定不能包含看起来像是一个JavaBean 属性,但却不

能从HTTP 请求设置的属性方法。

设计ActionForm时你应该当心的是它的自动化组装机制。自动化机制自己是乐于根据请求

来设置ActionForm的公共属性的,而不管它们是否是来自于HTML表单。所以,如果你要

将一个bean重用为ActionForm,bean上的一些公共属性—以及它的超类—就可从HTTP 请

求中直接设置。因为引用是可以被嵌套和链接的,某些作为成员属性的bean也被暴露,连

同其超类和一些成员属性。如果这些bean中的某些可以在系统状态中立即改变,那么一个

欺骗就可以影响到状态改变—即便那不是一个有意的用法。

如果你从头创建一个ActionForm,并按其原本的意图,你就完全没有必要担心自动组装。

但某些开发人员喜欢将业务对象置于ActionForm中以便它们可以从请求中通过值来传递。

如果这样,某些看起来像JavaBean 属性的方法, 如果它们接受一个 String 值,就可能被从

HTTP 请求来调用。

一个例子是ActionServlet的上载缓冲区大小。在 Struts 1.0中,ActionServlet 被暴露为一

个ActionForm成员属性。这意味着在 Struts 1.0, 你可以从HTTP请求中来调用

ActionServlet.setBufferSize。幸运的是,这并没什么影响,因为ActionServlet 仅在启动初

始化时使用这个值。然而,如果 servlet 是在运行时引用它,一个欺骗可以将它设置为0,

来创建一个拒绝服务攻击。

使用ActionForm这样的可以影响系统状态的bean,或者一个ActionForm的一部分, 就像直

接传递输入字段到一个外壳脚本。这就如同不能区分在误导的人群中哪些是狂欢纵乐的聪

明人一样。

ActionForm 就像一个防火墙系统中的DMZ:它使你在数据被允许传递到应用的其它部分

之前必须检查数据。