資源描述:
《安全編碼規(guī)范》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、安全編碼規(guī)范版本號(hào):V1.0第22頁修訂頁編號(hào)章節(jié)名稱修訂內(nèi)容簡述修訂日期修訂前版本號(hào)修訂后版本號(hào)修訂人批準(zhǔn)人第22頁目錄1目的52背景53安全編碼規(guī)范53.1輸入驗(yàn)證和數(shù)據(jù)合法性校驗(yàn)53.1.1避免SQL注入53.1.2避免XML注入53.1.3避免跨站點(diǎn)腳本(XSS)63.2聲明和初始化63.2.1避免類初始化的相互依賴63.3表達(dá)式73.3.1不可忽略方法的返回值73.3.2不要引用空指針83.3.3使用Arrays.equals()來比較數(shù)組的內(nèi)容83.4數(shù)字類型和操作83.4.1防止整數(shù)溢出83.4.2避免除法和取模運(yùn)算分母為零93.5類和方法操作103.5.1數(shù)據(jù)成員聲明為
2、私有,提供可訪問的包裝方法103.5.2敏感類不允許復(fù)制103.5.3比較類的正確做法103.5.4不要硬編碼敏感信息113.5.5驗(yàn)證方法參數(shù)113.5.6不要使用過時(shí)、陳舊或低效的方法113.5.7數(shù)組引用問題113.5.8不要產(chǎn)生內(nèi)存泄露123.6異常處理123.6.1不要忽略捕獲的異常123.6.2不允許暴露異常的敏感信息133.6.3不允許拋出RuntimeException,Exception,Throwable143.6.4不要捕獲NullPointerException或其他父類異常143.7多線程編程153.7.1確保共享變量的可見性153.7.2確保共享變量的操作是
3、原子的163.7.3不要調(diào)用Thread.run(),不要使用Thread.stop()以終止線程183.7.4確保執(zhí)行阻塞操作的線程可以終止183.7.5相互依存的任務(wù)不要在一個(gè)有限的線程池執(zhí)行193.8輸入輸出193.8.1程序終止前刪除臨時(shí)文件193.8.2檢測和處理文件相關(guān)的錯(cuò)誤193.8.3及時(shí)釋放資源193.9序列化203.9.1不要序列化未加密的敏感數(shù)據(jù)20第22頁3.9.2在序列化過程中避免內(nèi)存和資源泄漏213.9.3反序列化要在程序最小權(quán)限的安全環(huán)境中22第22頁1安全編碼規(guī)范1.1輸入驗(yàn)證和數(shù)據(jù)合法性校驗(yàn)程序接受數(shù)據(jù)可能來源于未經(jīng)驗(yàn)證的用戶,網(wǎng)絡(luò)連接和其他不受信任的
4、來源,如果未對程序接受數(shù)據(jù)進(jìn)行校驗(yàn),則可能會(huì)引發(fā)安全問題。1.1.1避免SQL注入使用PreparedStatement預(yù)編譯SQL,解決SQL注入問題,傳遞給PreparedStatement對象的參數(shù)可以被強(qiáng)制進(jìn)行類型轉(zhuǎn)換,確保在插入或查詢數(shù)據(jù)時(shí)與底層的數(shù)據(jù)庫格式匹配。?StringsqlString="select*fromdb_userwhereusername=?andpassword=?";PreparedStatementstmt=connection.prepareStatement(sqlString);stmt.setString(1,username);stmt.
5、setString(2,pwd);ResultSetrs=stmt.executeQuery();1.1.2避免XML注入通過StringBulider或StringBuffer拼接XML文件時(shí),需對輸入數(shù)據(jù)進(jìn)行合法性校驗(yàn)。對數(shù)量quantity進(jìn)行合法性校驗(yàn),控制只能傳入0-9的數(shù)字:if(!Pattern.matches("[0-9]+",quantity)){//Formatviolation}StringxmlString="- Widget"+"500"+"
6、y>"+quantity+"
";outStream.write(xmlString.getBytes());outStream.flush();1.1.3避免跨站點(diǎn)腳本(XSS)對產(chǎn)生跨站的參數(shù)進(jìn)行嚴(yán)格過濾,禁止傳入