最近用JAVA开发了一个动漫网站 ( www.dmvcd.com , 纯兴趣), 历经半个多月, 网站算是基本开发完了. 因为钱包的红牛数量有限, 租了个比较便宜的主机. 内存只有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包下载地址: http://mirrors.cnnic.cn/apache//struts/2.3.24/struts-2.3.24-lib.zip
[注意] 有个问题要注意: 从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 :
如果各位兄弟发现我的小网站有什么漏洞或不足, 可以留言给我, 我继续完善它, 哈哈...