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