Struts框架的一个安全隐患及解决方案(WEB-INF)

问题
使用Struts框架时,权限通常控制在Action级(比如将权限验证放在Action的基类中,这样新的Action都继承于这个Action基类,所有Action就可以专注于业务逻辑,而不需要重复地进行权限控制了),这也符合MVC中的角色划分。然而,这会产生一个安全隐患。因为权限控制在Action中,所以,页面也就没有安全屏障了。一般的新增数据、更新数据不会有什么问题,因为这些数据必须通过HTML的Form提交到Struts的中心控制器,最终由相应的Action来处理,所以Action中就可以验证该用户的权限了。然而,对于一些不需要Action进行数据存取,或者有的页面没有严格按照MVC的角色划分而在页面中有获取数据的代码,那么这个页面就危险了。比如,显示一张通知页面,通常可以通过配置权限,使部分授权的用户才可以看到该级别的通知。这个通知页面是不需要从数据库中获取数据的。所以,可以不通过Action的调用来显示,而是直接敲入显示该通知的页面的链接就可以看到了。甚至不需要登录系统,不用管是否有查看该通知的权限!
比如下图中,请求1:
http://.../showannouncement.do
是通过正常的途径访问的,需要经过权限验证。而请求2:
    http://.../announcementshow.jsp
则完全绕过了权限检查,任何人,不需要登录系统就可以访问到该信息了。

 

解决方案
解决的办法也不是没有,非常简单。大家都知道JSP Web容器会对应用的WEB-INF目录下的所有文件加以保护的,任何用户都不能直接通过浏览器访问WEB-INF目录(包括子目录)下的任何资源,然而这些资源可以被JSP Web容器访问。所以,解决办法已经出来了。可以把你的JSP页面放到WEB-INF目录下,在struts-config.xml的action的配置中注意要把转向的页面指向类似:/WEB-INF/pages/announcementshow.jsp。这样就保证了所有数据的安全了。
使用本文的方法,甚至可以对静态的页面,比如html的页面进行保护,设置权限以限制访问。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nini1109/archive/2009/06/29/4308020.aspx

 

 

        作为服务器,安全是首要的问题。在WebRoot下页面用户可以直接输入地址访问,而每个页面都配置安全选项又太不现实。而在Tomcat有一个安全的目录,直接拒绝用户使用地址栏访问,那就是WebRoot/WEB-INF。然而在此目录下的页面又不能直接进行跳转,默认的跳转目录是WebRoot。这时我们就需要写导航,具体方法如下:
        这是一个网页登陆页面index.jsp:        

< center >
    
< form  action ="/review/login"  method ="post" > <!--  提交到的页面不能直接写成/WEB-INF/login.jsp或者login.jsp,要写成"工程/配置的name"  -->
            
< table  border ="0"  cellspacing ="20" >
            
< tr >
                
< td >
.
                
</ td >
            
</ tr >
        
</ table >
    
</ form >
    
</ center >

然后在WEB-INF/web.xml下配置如下:

< servlet >
        
< servlet-name > login </ servlet-name > <!--  name  -->
        
< jsp-file > /WEB-INF/login.jsp </ jsp-file > <!--  具体的文件地址  -->
    
</ servlet >
    
    
< servlet-mapping >
        
< servlet-name > login </ servlet-name >
        
< url-pattern > /login </ url-pattern > <!--  地址栏显示的URL  -->
    
</ servlet-mapping >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值