jsp編程語言自從推出之日起,由於它的快速、平台無關、可擴展、面向對象等特性得到了越來越廣泛的應用,越來越多的廠家開發出了各種各樣的支持平台如IBM 公司的WebSphere、BEA公司的WebLogic等等,也有越來越多的網站開始將自己的平台架構在jsp 環境中。
但是隨之而來的就是一系列的安全漏洞問題,如源代碼暴露漏洞、遠程任意命令執行漏洞等等,更為頭疼的是,隨著jsp 的越來越廣泛的應用,安全問題也越來越多了。截止到這篇文章為止,Internet上公開的關於jsp 的漏洞問題就多達二、三十條(還不包括未公開的)。(統計數據來源於http://www.securityfocus.com)
不要輕視這些問題,想象一下,你辛辛苦苦開發出來的jsp 代碼就被別人這樣輕而易舉的獲得了,更為重要的是,你公司網站的代碼被人下載後,別有用意的人就會看你的代碼,從中找到一些漏洞來攻擊你的公司網站,所以這些問題不容忽視。作者在sohu 上搜索了一些用jsp做的國內網站,結果發現有一些網站確實存在各種各樣的漏洞,可以輕松的下載jsp源代碼。
本篇文章重點在於對jsp安全問題進行分類闡述和提出解決的建議,所以每種類型的安全問題只采用了一個例子,對於其它各種漏洞的具體細節如涉及到何種軟件版本何種操作系統等就不一一進行闡述了,有興趣的讀者可以到我的網站jsp 愛好者(http://jspbbs.yeah.net)或者國外的安全站點(http://www.securityfocus.com)進行查看和參考。
根據目前已經發現的jsp安全問題,我們不妨將它們分為以下幾類,源代碼暴露類、遠程程序執行類和其他類別, 下面來看看具體的東西吧。
一、源代碼暴露類
源代碼暴露類別主要指的是程序源代碼會以明文的方式返回給訪問者.
我們知道不管是jsp還是asp、php等動態程序都是在服務器端執行的,執行後只會返回給訪問者標准的html 等代碼。這是理論上的東西,實際運行起來由於服務器內部機制的問題就有可能引起源代碼暴露的漏洞,簡單的例子只要在程序文件名後加幾個簡單的字符就可能獲得程序代碼,如常見微軟asp 的global.asa+.htr、XXXX.asp%81等等漏洞。
1、添加特殊後綴引起jsp源代碼暴露
在jsp中也存在著和asp這些漏洞類似的問題,如IBM Websphere Application Server 3.0.21、BEA Systems Weblogic 4.5.1、Tomcat3.1等jsp文件後綴大寫漏洞;jsp 文件後加特殊字符如Resin1.2的%82、../漏洞;ServletExec的%2E、+漏洞等等。
例子:舉個老一點的JSP大寫例子,Tomcat3.1下在浏覽器中本來是http://localhost:8080/inde.jsp,可以正常解釋執行,但是如果將inde.jsp改為inde.JSP或者inde.Jsp等等試試看,你會發現浏覽器會提示你下載這個文件,下載後源代碼可以看個一干二淨。