安全編碼原則之程序內(nèi)部安全
3. 程序內(nèi)部安全
軟件程序在編碼完成實際部署后,在實際運行過程中,會碰到各種情況,如每次運行時操作系統(tǒng)內(nèi)存分配情況不同,系統(tǒng)資源分配情況不同,不同用戶的輸入不同,同時存在的其他進(jìn)程不同,網(wǎng)絡(luò)連接情況不同等等。這些不同情況不可能在軟件測試過程中模擬得到,只有靠良好的軟件設(shè)計和編碼來保證軟件的正確運行,因此,軟件在代碼執(zhí)行過程中,動態(tài)地檢查自身運行情況,確保軟件按照預(yù)期正確處理各種情況。
1)程序內(nèi)部接口安全:軟件程序內(nèi)部也存在多個組件、多個函數(shù)之間的互相調(diào)用,因此,組件或函數(shù)的調(diào)用過程也需要檢查能否調(diào)用成功,參數(shù)傳遞是否合理和安全。一個簡單的例子是,某個軟件內(nèi)部需要將用戶的中文姓名由一個函數(shù)傳遞給另外一個函數(shù),如果被調(diào)用函數(shù)想當(dāng)然地只分配了8個字節(jié)的空間來接收該中文姓名,那么在碰到有五個漢字的中文姓名時就會出現(xiàn)問題。
2)異常安全處理:軟件程序在運行過程中可能會出現(xiàn)某種錯誤而導(dǎo)致中斷正常的控制流,這就是異常現(xiàn)象。對于異常,軟件程序應(yīng)當(dāng)提供異常安全處理代碼,使其能檢測出各種異常,并安全處理各種可能的運行路徑,保證程序總能“正確”的運行。不提供異常處理代碼的軟件程序可能會在異常發(fā)生的時候停止運行,嚴(yán)重的甚至可能引發(fā)安全問題。如某個銀行轉(zhuǎn)賬程序,如果在用戶試圖轉(zhuǎn)賬時發(fā)生運行時錯誤(比如要調(diào)用的某個動態(tài)庫加載不成功),沒有安全處理程序,則該軟件程序可能會導(dǎo)致用戶的資金已經(jīng)轉(zhuǎn)出,同時接收方賬號尚未收到資金況。