JavaWeb 項目安全問題及其解決方案

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

10.重放攻擊.

11.殭屍網絡暴力破解(非弱口令)

12,登錄表單http明文提交

13.千萬不要亂用數據類型。使用基本數據類型,少用包裝類。包裝類容易被攻擊。不要用String去接受所有類型數據。原則上:是什麼類型就用什麼類型去接收。

14.通過架構設計,添加一層設置處理http參數(驗證數據的類型、合法性、長度和範圍)。一般都是通過aop來實現。比如:對郵件、手機的驗證,對非法數字(小於0)的驗證,對整數最大值的驗證,對字符串最大長度的驗證等。

15,點擊劫持.大概有兩種方式,一是攻擊者使用一個透明的iframe,覆蓋在一個網頁上,然後誘使用戶在該頁面上進行操作,此時用戶將在不知情的情況下點擊透明的iframe頁面;二是攻擊者使用一張圖片覆蓋在網頁,遮擋網頁原有位置的含義;

原文:http://blog.csdn.net/as38237/article/details/52088806

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章