当前位置: 首页 > 图文教程 > 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   浏览: 141 ::
收藏到网摘: n/a

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

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

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

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

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

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

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

将一个bean重用为ActionFormbean上的一些公共属性以及它的超类就可从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:它使你在数据被允许传递到应用的其它部分

之前必须检查数据。