轉自:http://hi.baidu.com/shineo__o/item/7520d54c24d234c71081da82
/ps:本以為這是一個偶然配置失誤造成的問題,但最近幾天無聊時測試發現,有此類似問題的站點就有上百個,所以在這里粗糙總結一下!
?
?
? 通常我們會碰到這樣一個問題,在某個web容器中部署的應用的敏感信息是禁止直接訪問的,但需要兩個web容器搭配使用時,由于安全意識的疏忽,導致前者的私密信息能夠通過http訪問到,一個很簡單的問題(可能大家也經常碰到),但經常容易被部署人員忽視,前段時間測試發現此類問題的站點還不少,其中不乏一些大型站點。
?
先看這張圖:
?
?
? 發現Tomcat容器下應用的WEB-INF文件夾下能夠被訪問到?
?
?上面是使用了Nginx + Tomcat容器分層,做了反向代理。
?
(
?
Nginx由于性能好、配置簡單、且基本不需要軟件成本;
?
Tomcat基本同上,但Tomcat有個缺點,處理靜態文件性能低下。
?
綜合一系列原因,對于一些創業型的或降低成本的互聯網公司,都會選擇j2ee及兩者作為網站web容器層架構首選(優點還有很多,這里就不去討論它)。
?
)
?
?
首先,看看截圖:
?
以上只是導致這一問題,兩個典型Nginx配置的case(其他場景也比較多)。
?
原因:在Nginx訪問轉接中配置了root(訪問的容器),通常是整個應用的根路徑,因為這樣方便把靜態文件交給Nginx來處理,就這么簡單。
?
先看看應用文件中的WEB-INF文件夾安全說明:http://baike.baidu.com/view/1745468.htm? (熟悉j2ee的就不多說了!)
?
?在Tomcat容器中,所有應用的WEB-INF文件夾是不能通過頁面直接訪問的。因為這個文件夾下信息重要,危害看看下面的一個case:
http://www.wooyun.org/bugs/wooyun-2010-07329
?
其他同樣問題的站點應用(另外其他有此問題的站點就不一一介紹了!):
?
http://www.wooyun.org/bugs/wooyun-2010-07760
?
由于j2ee架構的特性,導致了整個應用層的暴露!
?
當然,我們會通過Nginx的簡單配置解決這個問題:
?
?
但Nginx的這項配置絕對不是為了j2ee的安全問題而制訂的這一項安全規范。
?
同樣的問題在Apache + Tomcat的分層結構中也出現了。
?
?
我想說的是,這一問題只是在web容器搭配使用中,在j2ee的特性方面體現由為明顯的安全問題。那其他語言或其他容器中了?更或者在其他兩個或多個規范中,我們是否更要注意這些敏感信息的保護了?
?
簡單地說,一個規范的隱私問題如何在另一個規范中得到有效保護?
?
那么這一問題應該算是誰的安全問題或者說誰該負責了?
?
?不好說,設計標準中“松耦合”這一詞用得真好,誰愿意去主動承擔更多的責任?
?
?但從Nginx + Tomcat中,個人認為是Nginx,因為Tomcat在整個web容器分層架構中權重要低!
?
要做更高層的產品就必須去兼容(讓這一問題成為Nginx 默認安全配置項,畢竟WEB-INF文件夾對于j2ee來說太重要了!)底層產品(當然要看這一高層產品是怎么去描述自己的)!
?