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

Web框架
struts2(三)
struts2(四)
struts2(五)
struts2(六)
Spring中注入概念的简单介绍
深入探讨struts的ActionMessages消息机制(转)
DWR 的 Converter 实现原理简单分析及应用
详解Spring中bean的作用域
AJAX实现级联下拉框
Spring AOP面向方面编程原理:AOP概念
Spring结合Hibernate声明式事务配置
Struts 概述
Ajax 入门简介
Struts配置文件详解
Struts in Spring
Struts 开发的最佳实践
Struts核心标签
开发框架:利用STRUTS实现国际化支持
Struts自定义标签的过程
Struts 框架的基本概念及实现MVC模式的原理

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 259 ::
收藏到网摘: 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:它使你在数据被允许传递到应用的其它部分

之前必须检查数据。