安全編碼原則之安全調(diào)用組件
4.安全調(diào)用組件
軟件程序幾乎都不會(huì)是自包含的,它們通常都會(huì)調(diào)用其他組件,包括底層的操作系統(tǒng)、。 數(shù)據(jù)庫(kù)系統(tǒng)、可重用的庫(kù)、Internet服務(wù)(例如DNS)、‘Web服務(wù)等。這種組件調(diào)用極大地促進(jìn)了軟件的發(fā)展,能讓軟件開(kāi)發(fā)者集中精力開(kāi)發(fā)自己的功能模塊,并借用其他方為用戶提供更為強(qiáng)大的功能服務(wù)。但是,這種組件調(diào)用同時(shí)存在很大的安全問(wèn)題,即攻擊者可能更為方便地利用組件發(fā)起攻擊。為避免調(diào)用組件帶來(lái)安全問(wèn)題,建議在組件安全、返回值安全以及傳遞數(shù)據(jù)安全等幾個(gè)方面加強(qiáng)安全防護(hù)。
1)組件安全:盡量使用自己或可信的組件,對(duì)第三方組件,應(yīng)當(dāng)能在具有更為詳細(xì)的安全說(shuō)明、獲得更安全的信心,甚至是只有經(jīng)過(guò)安全認(rèn)證后才可以調(diào)用。在選用可用組件的時(shí)候,應(yīng)當(dāng)廣泛地了解該組件是否存在安全問(wèn)題,或搜索獲得更廣泛應(yīng)用、被公眾檢驗(yàn)過(guò)不存在問(wèn)題的公共組件。在正是調(diào)用任何組件之前,即使只可能調(diào)用很小的一個(gè)函數(shù),應(yīng)當(dāng)先對(duì)其進(jìn)行考察,獲取有關(guān)使用文檔,了解其中是否提及了安全性警告。
2)返回值安全:當(dāng)調(diào)用的組件函數(shù)返回時(shí),應(yīng)當(dāng)對(duì)返回值進(jìn)行檢查,確保所調(diào)用的函數(shù)“正確”處理、結(jié)果“正確”地返回。這里正確是指被調(diào)用的組件函數(shù)按照規(guī)定的流程和路
徑運(yùn)行完成,其中包括成功的執(zhí)行路徑,也可能包括錯(cuò)誤的處理路徑。當(dāng)組件函數(shù)調(diào)用成功時(shí)應(yīng)當(dāng)檢查返回值,確保組件按照期望值處理,并且返回結(jié)果符合期望,如執(zhí)行reacl(2)時(shí),所讀取的字節(jié)數(shù)可能少于所請(qǐng)求的字節(jié)數(shù);當(dāng)組件函數(shù)調(diào)用錯(cuò)誤時(shí)應(yīng)當(dāng)檢查返回值和錯(cuò)誤碼,以得到更多的錯(cuò)誤信息。
3)傳遞數(shù)據(jù)安全:畢竟軟件程序和被調(diào)用組件之間是通過(guò)系統(tǒng)或網(wǎng)絡(luò)調(diào)用,在兩者之間傳遞數(shù)據(jù)時(shí),攻擊者可能可以讀到或篡改這些傳遞的數(shù)據(jù),尤其當(dāng)這些數(shù)據(jù)通過(guò)網(wǎng)絡(luò)進(jìn)行傳遞時(shí)。因此,需要采取安全措施,確保攻擊者不會(huì)讀取或篡改軟件程序和被調(diào)用組件之間傳遞的數(shù)據(jù)。通常可供參考使用的安全措施包括數(shù)據(jù)加密和采用安全協(xié)議,常見(jiàn)的數(shù)據(jù)加密算法包括DES、AES、RSA等,安全協(xié)議包括TLS、IPSec和OpenSSH等。