让你的commontemplate安全一些--struts 篇

不知道现在有多少人 正在/打算 使用 commontemplate,这个文章就算是与使用 commontemplate 的朋友的经验的分享吧!

这里主要说的是 commontemplate(以下简称 ct) 与 struts 结合的问题。

在 ct 的官方站点中有 struts 集成的例子,非常简单,首先是要有一个自己的 commontemplate.properties 了,里面有如下的配置:


virtualDirectory=/WEB-INF/pages


然后在 struts 的配置文件中进行如下的跳转:


<action path="/test" forward="/test.ctl"/>


([b]注:其他 web.xml 中配置略过[/b])

这样,当我们访问 test.do 的时候,ct 的 servlet 就会去解析 test.ctl。

但是,我们不要忽略其中的安全问题。

当我们直接访问 test.ctl 的时候,ct 的 servlet 一样会解析 test.ctl。

这样问题就来了,对于后台管理,或者需要校验的页面,用户完全可以跳过 .do ,而去直接访问 .ctl ,这样, .do 中的校验就完全没有作用了!

如何避免这个问题?其实在使用jsp的时候,我们就遇到过这个问题。解决的措施是我们把jsp放到 WEB-INF 目录下,这样浏览器就不能直接访问 jsp 了。

所以我们要采取同样的措施。等等,那个例子中模板文件已经放在了 WEB-INF 目录里了。恩,是的,不过我们需要修改一下,配置文件中:


virtualDirectory=/


struts 中修改如下:


<action path="/test" forward="/WEB-INF/pages/test.ctl"/>


这样,当我们访问 test.do 的时候,仍然会显示 test.ctl 的内容。但是我们却无法通过浏览器访问 test.ctl 了!

为什么会这样呢?因为 ct 的 servlet 解析模板的时候,寻找模板的路径是 virtualDirectory + struts中forward 。所以,如果 virtualDirectory = /WEB-FIN/pages/ 的时候,在浏览器中输入 http://localhost:8080/test/test.ctl 的时候,能找到那个模板文件。
但是如果 virtualDirectory = / 的时候,在浏览器中输入 http://localhost:8080/test/test.ctl 的时候,就找不到模板文件了。如果你输入 http://localhost:8080/test/WEB-INF/pages/test.ctl,也一样无效,因为 WEB-INF 目录是无法访问的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值