1. 程式人生 > >java web專案安全注意事項

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、 日誌,建議增加服務的訪問日誌,記錄來訪者的 IP ,傳遞引數,對後臺操作使用者建立日誌,記錄其操作內容。完善的日誌記錄可以幫助你發現潛在的危險,找到已經發生的問題。
10.重放攻擊.
11.僵屍網路暴力破解(非弱口令)
12,登入表單http明文提交
13.千萬不要亂用資料型別。使用基本資料型別,少用包裝類。包裝類容易被攻擊。不要用String去接受所有型別資料。原則上:是什麼型別就用什麼型別去接收。
14.通過架構設計,新增一層設定處理http引數(驗證資料的型別、合法性、長度和範圍)。一般都是通過aop來實現。比如:對郵件、手機的驗證,對非法數字(小於0)的驗證,對整數最大值的驗證,對字串最大長度的驗證等。
15,點選劫持.大概有兩種方式,一是攻擊者使用一個透明的iframe,覆蓋在一個網頁上,然後誘使使用者在該頁面上進行操作,此時使用者將在不知情的情況下點選透明的iframe頁面;二是攻擊者使用一張圖片覆蓋在網頁,遮擋網頁原有位置的含義;