資安JAVA(十四):JSP請放入WEB-INF中

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 14 – STORE JSPS IN WEB-INF
作者:John Melton
內文:
Administrator: STOP!! No further step!
What is it and why should I care?

Java Server Pages (JSPs)是J2EE的開發環境中上最普遍的UI技術。使用者透過JSP頁面與應用程式互動。JSP也包含著一些商業邏輯,通常某部分的JSP頁面要先經過授權才能使用。而且將使用者跳轉( Forward )到特定JSP頁面前,作為保護作用,處理要求的程式會先執行身分驗證。最起碼,JSP頁面通常含有重要的邏輯和資料,所以基本上JSP不能被未經授權的使用者存取。

當你更了解這項資源的重要性,更應該要保護他們。一般來說,現今的應用程式通常使用MVC架構。進一步的說,正常的使用應用程式並不能直接存取到JSP,而是MVC架構中的Controller或Handler依據你的要求和處理邏輯,將你跳轉到特定JSP。然而,如果你將JSP存放在WEB環境中可讀取的目錄,而不是放在 WEB-INF (web.xml 所在的目錄),其他人還是可以直接存取你的JSP。他們缺少Controller傳來的指示,或未經過適當的授權,導致你的JSP頁面出現錯誤畫面。

附註:同樣的問題可以延伸到config檔、scripts檔等等,但JSP被公認是WEB應用程式中,一般使用者最常存取的資源型態。而且config檔預設就存放在WEB-INF目錄中,簡化了開發者的工作。


What should I do about it?

Servlet 的設計中規定,WEB-INF目錄中是不能被外部使用者讀取的。換句話說,任何Request想要讀取WEB-INF都會被拒絕。除非你的Server有漏洞,那就是另外一段故事。

解釋這麼多,你應該學會把JSP檔存放在WEB-ING目錄,你的應用程式仍然可以存取JSP,因為這屬於發生在Server端的跳轉(Forward)。帶來的好處是你可以避免使用者故意的直接存取JSP。

須注意一點,存放在WEB-INF的JSP仍有權限進行檔案操作(read、write、move等等)然後直接讀取目錄內的檔案。這表示其他人可以利用一大堆的bug,來讀取 web.xml。WEB-INF目錄可以避免外部使用者讀取目錄內的檔案,但無法避免目錄內的程式碼執行。

將JSP存放在WEB-INF目錄是很簡單也很有效的小技巧,避免其他人故意存取你的JSP,你可以此為應用程式增加額外一層的保護。

參考資料
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=1003
http://caterpillar.onlyfun.net/Gossip/ServletJSP/DirectoryStructure.html

———–———–
資安Java: 上一篇 || 下一篇
———–———–

留言

這個網誌中的熱門文章

資安JAVA(十):X-Content-Type-Options

資安JAVA(十一):X-XSS-Protection

資安JAVA(四):Session Cookie HTTPOnly Flag