最近struts安全問題影響很大啊,iteye上面也有新聞:Apache Struts團隊6月底發布了Struts 2.3.15版本,由於該版本被發現存在重要的安全性漏洞,因此該團隊今天發布了Struts 2.3.15.1安全更新版本。
新聞地址:http://www.iteye.com/news/28053
因此我升級了下當前項目的struts版本,原來是2.2.3,現在升級到2.3.15.1
首先下載jar包:http://struts.apache.org/download.cgi#struts23151
Essential Dependencies Only:
struts-2.3.15.1-lib.zip (19MB) [PGP] [MD5]
從下載的jar包拷貝核心包:
antlr-2.7.2
aopalliance-1.0
asm-3.3
asm-commons-3.3
asm-tree-3.3
builder-0.6.2
classworlds-1.1
commons-beanutils-1.8.0
commons-collections-3.1
commons-chain-1.2
commons-digester-2.0
commons-fileupload-1.3
commons-io-2.0.1
commons-lang3-3.1
commons-lang-2.4
commons-logging-1.1.3
commons-logging-api-1.1
commons-validator-1.3.1
freemarker-2.3.19
ognl-3.0.6
struts2-convention-plugin-2.3.15.1
struts2-core-2.3.15.1
struts2-dojo-plugin-2.3.15.1
struts2-jfreechart-plugin-2.3.15.1
struts2-json-plugin-2.3.15.1
struts2-junit-plugin-2.3.15.1
struts2-spring-plugin-2.3.15.1
xwork-core-2.3.15.1
到此先備份原來的所有jar,以防萬一……
刪除項目WEB-INF/lib下:
asm-3.1
struts2-spring-plugin-2.2.3
struts2-junit-plugin-2.2.3
struts2-json-plugin-2.2.3
struts2-jfreechart-plugin-2.2.3
struts2-dojo-plugin-2.2.3
struts2-core-2.2.3
ognl-2.7.3
freemarker-2.3.15
commons-collections-3.1
commons-io-1.3.2
commons-fileupload-1.2.1
commons-beanutils-1.7.0
commons-validator-1.3.1
xwork-core-2.2.3
最安全的做法:
以核心jar為準,如果在原lib裡有同名但不同版本的jar就replace,沒有就直接copy,替換方式遵循“誰新替換誰”的原則。
(小插曲:我拷貝了核心jar裡的antlr-2.7.2,但是我原來的項目裡有antlr-2.7.6,我沒注意,結果報java.lang.NoSuchMethodError: antlr.collections.AST.getLine()的錯誤,刪除antlr-2.7.2即可)
對於struts2開頭的jar,只要原來有的,都在核心jar裡找到替換的版本,沒有同名的就不換。
請注意:原lib裡的commons-collections、commons-lang、commons-logging要保留。
重新整理後(請確保更換lib之前項目是運行無誤的…),重新設定tomcat並運行……
如果遇到一些NoSuchMethod或者NotClassFound等等的提示,檢查一下是不是誤刪了原來的某個jar;
如果看到如此提示:
***********************************************************************
* WARNING!!! *
* *
* >>> FilterDispatcher <<< is deprecated! Please use the new filters! *
* *
* This can be a source of unpredictable problems! *
* *
* Please refer to the docs for more details! *
* http://struts.apache.org/2.x/docs/webxml.html *
* *
***********************************************************************
在web.xml裡把FilterDispatcher 替換成StrutsPrepareAndExecuteFilter(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)
如果看到如此提示:
***********************************************************************
* WARNING!!! *
* *
* >>> ActionContextCleanUp<<< is deprecated! Please use the new filters! *
* *
* This can be a source of unpredictable problems! *
* *
* Please refer to the docs for more details! *
* http://struts.apache.org/2.x/docs/webxml.html *
* *
***********************************************************************
同樣是在web.xml裡把ActionContextCleanUp替換成StrutsPrepareAndExecuteFilter(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)
若原來就配置有StrutsPrepareAndExecuteFilter,則把ActionContextCleanUp去掉。
比如我這裡修改後的樣子:
Xml代碼 <span style="font-size: 16px;"><!-- STRUTS配置 --> <!-- <filter> 升級到2.3.15.1後要去掉 <filter-name>struts2-cleanup</filter-name> <filter-class> org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class> </filter> <filter-mapping> <filter-name>struts2-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> </span>
關於升級後的web.xml配置請參考:
http://struts.apache.org/development/2.x/docs/webxml.html
原地址:http://weilikk.iteye.com/blog/1931527