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