Java項目的安全開發一般需要注意以下這些方面的規范:
輸入驗證:對于用戶輸入項進行數據驗證,除常見的數據格式、數據長度外,還需要對特殊的危險字符進行處理。對于核心業務功能,除在客戶端或瀏覽器進行數據驗證外,還必須在服務器端對數據進行合法性檢驗,規避用戶跳過客戶端校驗,直接將不合規的數據保存到應用中;對于瀏覽器重定向地址的數據,需要進行驗證核實,確認重定向地址是否在可信,并且需要對換行符(r或n)進行移除或者替換。
數據輸出:對需要輸出到用戶瀏覽器的任何由用戶創造的內容,應在輸出到瀏覽器之前或持久化存儲之前進行轉義(至少對<>轉義為< >)以防止跨站攻擊腳本(XSS)。對于無法規避的HTML片段提交,需對
script、iframe標簽進行檢查處理,避免應用被掛馬的可能性;在程序中應盡量規避SQL的拼接處理,優先推薦使用iBatis/MyBaits框架,其次推薦使用SQL的參數化查詢方法,在無法避免使用SQL拼接時,因對SQL參數值進行編碼處理(至少對單引號進行編碼)。會話管理:不要在 URL、錯誤信息或日志中暴露會話標識符。會話標識符應當只出現在HTTP cookie頭信息中。比如,不要將會話標識符以 GET參數進行傳遞;將cookie設置為HttpOnly屬性,除非在應用程序中明確要求了客戶端腳本程序讀取或者設置 cookie的值;從Cookie或者Session中獲取之前保存的數據進行應用時,須增加必要的數據檢驗;對于敏感的業務操作,通過在每個請求或每個會話中使用強隨機令牌或參數,為高度敏感或關鍵的操作提供標準的會話管理。
訪問控制:應用必須具備授權訪問控制功能,能夠限制在最小的范圍內使用系統功能。同時限制只有授權的用戶可以訪問受保護的URL。
文件管理:在文件上傳處理中,應限制符合要求格式的文件,盡量避免用戶直接上傳可執行文件或在服務器端限制可執行文件的執行權限;在文件下載時,應規避直接列舉服務器上的文件,同時規避將服務器端的路徑作為參數進行傳遞,避免用戶非法獲取服務器端文件。
數據加密:原則上在程序代碼中不能直接寫入用戶和密碼,對于無法規避的情況,應當對使用的用戶名、密碼進行加解密處理,在程序中使用加密后的內容。
錯誤處理:不要在錯誤響應將服務器的信息暴露給最終用戶,例如:服務器的IP地址、操作系統的類型和版本、會話標識符、賬號信息等,從而避免增加服務端被黑客攻擊的可能性;在錯誤處理時,因在后臺統一進行日志記錄,避免顯示調試或堆棧跟蹤信息,建議使用通用的錯誤消息并使用定制的錯誤頁面。
其它通用規范:審核應用使用的第三方開發框架、第三方代碼或類庫文件,以確定業務的需要,并驗證功能的安全性,避免產生新的漏洞;執行安全更新。如果應用程序采用自動更新,則為您的代碼使用加密簽名,以確保的您的下 載客戶端驗證這些簽名。使用加密的信道傳輸來自主機服務器的代碼。