最近用JAVA开发了一个动漫网站 ( , 纯兴趣), 历经半个多月, 网站算是基本开发完了. 因为钱包的红牛数量有限, 租了个比较便宜的主机. 内存只有2G, 怕程序会挂掉, 于是自己写了个 monitor 监控程序, 可以自动检测和重启网站, 还会发email通知.
最后用了百度的云观测(功能强大, 包括监控网站的功能, 缺点是不能自动重启网站, 呵呵). 问题来了, 刚用了云观测没多久, 就收到了百度的邮件通知和短信通知, 告知网站存在 strtus 漏洞, 危害就是 被******,引起 数据库泄露网站被篡改等. 我用百度的测试URL来测试, 发现确实会导致网站发生异常, 甚至挂掉.
好吧, 既然度娘都提醒有漏洞, 那就修复吧(有BUG必修是我们程序猿的天性, 呵呵). 网站之前用的strtus版本是2.2.3, 度娘说在2013年6月底, apache发布的
Struts 2.3.15版本被曝出存在重要的安全漏洞, 需要升级到最新版本或是打补丁.
下图是网站strtus升级之前,用到的部分jar包:
直接升级到最新的2.3.24版本, 更新后的部分jar包如下:
Strtus2.3.24最新jar包下载地址:
[注意] 有个问题要注意: 从strtus官网上下载的jar不能全部导入到 WEB-INF的lib下, 会出现各种问题(终究是些jar冲突, 或是版本兼容的问题), 所以升级自己需要的jar包就可以了.
jar更新完之后, 网站在用DMI动态调用Action的方法的时候, 出现404错误(提示 could not find action or result异常). 好吧, 继续问度娘. 度娘说strtus 2.3.15
版本后, 默认是关闭DMI动态调用action 方法这个功能的.
知道问题就好办, 直接在strtus配置文件里配置一下, 开启这个功能就可以了. 在struts.xml中, 增加了下面的配置:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
再测试一下, 问题解决. 这里要提示一下: strtus官方推荐使用通配符的方式来配置, 而不是 action!methodName 的方式来调用.
[ strtus升级小结 ]:
1. strtus.xml 中版本的声明需要修改为:<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
2. 仅升级自己需要的jar包.3. 开启动态DMI调用Action的方法, 在strtus.xml中 增加 <constant name="struts.enable.DynamicMethodInvocation" value="true" />PS :
如果各位兄弟发现我的小网站有什么漏洞或不足, 可以留言给我, 我继续完善它, 哈哈...