tomcat安全配置之禁用Directory Listing
? ? ? ? 什么是Directory Listing?通俗點講,就是在webapp的目錄下如果沒有放置index.html或者類似的文件,如果從IE或者其它瀏覽器文章這個路徑時,會驚喜的發現這個目錄下的文件列表被輸出到了頁面上。使用書面語言來講解專有詞匯總是很麻煩的,不如實際操作一把。
? ? ? ? 從apache的tomcat項目主頁上新下載一個6.0.29版本的tomcat二進制發布包,在本地解壓之后,手工在webapps目錄下新建一個test目錄,同時修改%CATALINA_HOME%\conf\web.xml文件,啟用directory list特性,樣例配置如下。
?
<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>true</param-value></init-param><load-on-startup>1</load-on-startup></servlet>? ? ? ? 啟動tomcat,然后使用IE訪問http://localhost:8080/test,會看到什么?理論上講,會發現test目錄里的內容出現在了IE頁面上,這個是不是很神奇,不需要登錄Web應用所在的服務器就可以查看路徑下的文件信息。另外一個驚喜是Tomcat的版本號信息也被輸出到了頁面上,吼吼,這下是不是可以做很多事情咯。
?
? ? ? ? 看過Directory Listing的現象之后,似乎沒有什么特別的危害,test目錄里沒有多少文件,也沒什么特別有意義的信息,那么為什么6.0.29版本的tomcat會默認關閉這個特性呢?根據官方文檔和實踐經驗看,這個選項的危害體現在如下幾點:
1、如果對用戶的操作做特別的控制的話,開啟Directory Listing會暴露一些用戶不必要、不應當看到的信息,相當于是無意中為訪問者開啟了刺探信息的窗口;
2、輸出目錄內文件列表的操作本身對應用的影響可大可小,如果目錄內恰巧沒什么文件,可能對應用影響不大;但如果目錄內有大量的文件,比如幾千至幾萬,這時單純執行ls都會很慢,可想而知由tomcat來輸出類似信息的頁面會占用多少資源了。如果web應用存在這樣的目錄,并被惡人都知,只要多找幾臺機器,寫個腳本,腳本里多開幾個線程,短時間內反復訪問這個目錄的URL,就會對web應用產生很大的壓力,占用過多的資源,進而導致正常用戶的訪問受到影響;
3、開啟Directory Listing之后,頁面在輸出目錄內文件列表清單時,還會順便輸出Tomcat的版本號,這又給惡人提供了重要的信息。版本信息定義在catalina.jar的屬性文件org/apache/catalina/util/ServerInfo.properties中,對于6.0.29版本來說,版本信息默認如下
?
server.info=Apache Tomcat/6.0.29 server.number=6.0.0.29 server.built=July 19 2010 1458?
。。。。
? ? ? ? 限于經歷和經驗,Directory Listing的危害目前只能列舉這么多。下面列舉出整改的方法。
1、修改配置文件%CATALINA_HOME%\conf\web.xml,修改默認servlet的參數,把listings的值調整為false,關閉這個特性,或者自定義DefaultServlet類的實現,不允許從配置文件中讀取listing屬性的值,從源頭關閉開啟這個特性的可能;
2、打開%CATALINA_HOME%\lib\catalina.jar文件,修改屬性文件org/apache/catalina/util/ServerInfo.properties的內容,把server.info、server.number、server.built字段的取值全部調整為無意義的字符串。
?
總結
以上是生活随笔為你收集整理的tomcat安全配置之禁用Directory Listing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java自学感悟
- 下一篇: PHP中环境变量的设置