
軟件安全開發培訓
數據輸入驗證與數據清理
1、SQL注入,XML注入,regex注入攻擊原理與防范
了解系統輸入數據驗證過程中的安全注意事項,以及轉換和傳輸過程中的安全注意事項
2、字符串驗證,路徑名驗證以及日志記錄中的安全漏洞與防范
3、ZipInputStream與Runtime安全注意事項
4、字符串在編碼轉換,網絡傳輸中的安全注意事項
對象聲明與初始化過程中安全陷阱與防范
1、防范類初始化的嵌套循環
了解對象聲明與初始化過程中安全陷阱與防范方法
2、不要重復使用Java標準庫中的公開標識符
3、循環相關變量聲明注意事項
表達式安全注意事項-實戰案例分析
1、不要忽略方法的返回值
了解表達式安全注意事項
2、不要引用空指針
3、數組內容比較安全注意事項
4、‘==’和equals方法中的安全注意事項
5、原始數據封裝與運算中的安全注意事項
數字類型與操作安全-實戰操作
1、防范整數溢出
了解數字類型變量聲明和操作中的各種安全問題及其防范方法
2、單精度浮點數運算相關安全問題
3、strictfp的使用
面向對象安全
1、防范類與方法的惡意擴展
了解對象聲明,繼承,傳遞過程中的各種安全問題及其防范方法
2、更新父類引發的安全問題
3、傳遞對象時使用copy功能
4、防范嵌套類暴露外層類的敏感信息
類方法安全
1、類方法參數的驗證
了解類方法實現過程中的各種安全問題及避免方法
2、Assert相關安全注意事項
3、用private和final修飾執行安全檢查的方法
4、降低被覆蓋方法與隱藏方法的可見性
5、其他類方法相關的安全注意事項
異常處理中的安全問題
1、 壓抑或忽視異常情況導致的安全問題
了解異常處理中的安全問題及防范方法
2、異常暴露敏感信息
3、防范日志記錄過程中的異常
4、finally相關安全問題
5、不要拋出RuntimeException,Exception,或者Throwable異常
可見性與原子性
1、共享變量復合操作的原子性
了解共享變量訪問和復合操作原子性相關的安全問題及其防范方法
2、保證一連串的方法調用具有原子性
3、不要假定對一組相互獨立的方法的調用具有原子性
4、當讀寫64位數據時確保原子性
5、保證共享原始變量的可見性
輸入輸出安全
1、操作共享目錄的風險
了解輸入輸出中安全問題及其防范方法
2、應用程序結束前刪除所有臨時文件
3、檢測和處理文件相關的錯誤
4、文件操作相關的其他安全問題
序列化過程中安全
1、在class升級進化過程中,維護序列化過程的兼容性
了解序列化過程中的安全問題及防范方法
2、使用正確的序列化方法聲明方式
3、不要序列化非加密的敏感數據
4、在序列化過程中避免內存和資源泄露
5、序列化過程中其他安全相關問題
線程安全
1、不要對一個可能重用的對象加鎖
了解線程安全相關問題及其防范方法
2、不要對getClass()方法返回的class對象進行加鎖
3、線程API(run,ThreadGroup,stop)相關安全問題
4、在一個線程池內不要執行相互依賴的任務
5、當使用線程池時,確保ThreadLocal變量重新初始化
平臺安全
1、不要允許特權模塊泄露敏感信息到受信區域之外
了解Java平臺相關的安全問題及其防范方法
2、不允許特權模塊有受污染變量
3、不要使用反射機制增加類,方法和成員變量的可訪問性
4、不要在非受信區域執行安全檢查
運行時環境安全
1、只執行非特權操作的代碼不要進行代碼簽名
了解Java運行時環境安全相關問題及其防范方法
2、把所有安全敏感相關的代碼放在一個單一的jar包中,進行簽名封裝
3、不要進行危險的聯合授權
4、不要廢除二進制碼的驗證機制