Java WEB安全問題及解決方案

1.弱口令漏洞,最好使用至少6位的數字、字母及特殊字符組合作爲密碼。數據庫不要存儲明文密碼,應存儲MD5加密後的密文,由於目前普通的MD5加密已經可以被破解,最好可以多重MD5加密。

2.未使用用戶名及密碼登錄後臺可直接輸入後臺URL登錄系統。

解決方案:通過配置filter來過濾掉無效用戶的連接請求。

3.JSP頁面拋出的異常可能暴露程序信息。有經驗的入侵者,可以從JSP程序的異常中獲取很多信息,比如程序的部分架構、程序的物理路徑、SQL注入爆出來的信息等。

解決方案:自定義一個Exception,將異常信息包裝起來不要拋到頁面上。

4.合法用戶“註銷”後,在未關閉瀏覽器的情況下,點擊瀏覽器“後退”按鈕,可從本地頁面緩存中讀取數據,繞過了服務端filter過濾。
解決方案:配置filter對存放敏感信息的頁面限制頁面緩存。如:

httpResponse.setHeader("Cache-Control","no-cache"); 
httpResponse.setHeader("Cache-Control","no-store");
httpResponse.setDateHeader("Expires", 0);
httpResponse.setHeader("Pragma","no-cache");

5.SQL注入漏洞,解決方案:在數據庫訪問層中不要使用“+”來拼接SQL語句!如:

String sql= “SELECT * FROM USERS WHERE 1=1”;
if(null != user.getUserName() && !””.equals(user.getUserName())){
sql += “ and UNAME = ‘”+user.getUserName()+”’”;
}
而應使用PreparedStatement。如:

PreparedStatement pstmt = con.prepareStatement("SELECT * FROM USERS WHERE UNAME=?");
pstmt.setString(1, “Neeke”);
如果項目中使用了Hibernate框架,則推薦使用named parameter。如:

String queryString = "from Users where uname like :name";
冒號後面是一個named parameter,我們可以使用Query接口將一個參數綁定到name參數上:

List result = session.createQuery(queryString)
                  .setString("name", user.getUserName())
                  .list();
6.文件上傳漏洞。前臺僅使用JS對文件後綴做了過濾,這隻能針對普通的用戶,而惡意攻擊者完全可以修改表單去掉JS校驗。
解決方案:前臺JS過濾加服務器端程序過濾。具體過濾掉哪些文件類型視具體情況而定。

7.可執行腳本漏洞。對用戶提交的數據未轉義,一些用戶提交的含有JavaScript腳本的信息被直接輸出到頁面中從而被瀏覽器執行。

解決方案:使用org.apache.commons.lang.StringEscapeUtils對用戶提交的數據進行轉義。如:

@RequestMapping(params="method=addTopic",method=RequestMethod.POST)
public ModelAndView addTopic(HttpServletRequest request, HttpServletResponse response, BbsTopic topic)
{
BaseAdmin user = (BaseAdmin) request.getSession().getAttribute(Constant.SESSION_USER);
topic.setBaseAdmin(user);
topic.setTopicDate(new Timestamp(System.currentTimeMillis()));
topic.setTopicContent(StringEscapeUtils.escapeHtml(topic.getTopicContent()));
topic.setTopicTitle(StringEscapeUtils.escapeHtml(topic.getTopicTitle()));
this.bbsTopicService.save(topic);
return new ModelAndView(new RedirectView("bbs.do?method=topicList&bfid="+ topic.getBfid()));
}

8.Java WEB容器默認配置漏洞。如TOMCAT後臺管理漏洞,默認用戶名及密碼登錄後可直接上傳war文件獲取webshell。

解決方案:最好刪除,如需要使用它來管理維護,可更改其默認路徑,口令及密碼。


9.絕對絕對絕對要採用預處理的方式來進行sql操作,如果實在需要做sql語句的拼接,那麼請做輸入信息的過濾。selet,update,delete,insert,and,%,',_,這些都屏蔽了吧。

10.一般的sql注入都是從網站的前臺網頁尋找漏洞,建議針對前臺操作和後臺操作分別建立數據庫操作用戶。前臺的用戶只賦予實際需要的基本權限。後臺用戶可權限可以寬鬆些但也只能針對當前庫。切不可用root級別的用戶作數據庫連接。否則數據丟了,你都沒地方哭去。

11.用戶登錄表的密碼一定要加密,如果可以也可將用戶名一併加密。這是以防萬一的最後手段,當對方看你的用戶登錄表的時候起碼看到也不知道是什麼。

12.jsp文件集中放到指定的文件夾下,如果你使用struts那麼你可以將struts使用的文件放在WEB-INF目錄下的某個文件夾中,因爲該WEB-INF文件夾網站瀏覽用戶是看不到的。

13.文件上傳一定要做類型檢查,一些jsp,php,asp等程序文件堅決不能讓其上傳。如果你用的是linux 下apache+tomcat 做的jk連接,你可以將文件直接上傳到apache目錄,或者用ln作軟連接,萬一對方上傳了jsp文件你沒判斷出來,那麼也是傳到了apache目錄下,你在jk指向中將jsp文件指定到tomcat中某一文件夾,對方在瀏覽器中是無法訪問上傳的jsp文件的。

14日誌,建議增加服務的訪問日誌,記錄來訪者的IP,傳遞參數,對後臺操作用戶建立日誌,記錄其操作內容。完善的日誌記錄可以幫助你發現潛在的危險,找到已經發生的問題。




http://blog.csdn.net/fightplane/article/details/5645035
http://www.ineeke.com/archives/1335/
http://chenjinglys.blog.163.com/blog/static/16657571620121125114016746/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章