是否需要考慮第三方接口的安全性?

大概聊聊在項(xiàng)目中,使用第三方庫時一些注意點(diǎn)。

這個項(xiàng)目中,接入了友方的一些功能,以頭文件及動態(tài)庫形式,也提供了接口說明以使用方法。

有塊邏輯功能不是我負(fù)責(zé)的,因?yàn)闀r間剩余一些就大概看了看。有幾行代碼存在安全問題即常見的內(nèi)存越界和性能問題。

因?yàn)槿绻峁┗A(chǔ)庫給別人使用,至少接口參數(shù)說清楚,算是一種約定。比如會改變或者不改變形參,盡量說清楚,不會改變加const引用或者指針,一般引用比較好,不會引用空對象。這樣用的時候就不需要拷貝一份數(shù)據(jù)傳遞進(jìn)去。

當(dāng)然,有些“指南”會建議在接口內(nèi)檢查每個參數(shù)是否合法,而有的建議不檢查,因?yàn)閭饕粋€比如空指針到接口內(nèi)或者比如字符串拷貝傳來可能重疊區(qū)域造成覆蓋等問題,是不應(yīng)該的,是使用者的問題,接口的實(shí)現(xiàn)不可能考慮到每一種情況,設(shè)計(jì)彈性的接口,其實(shí)不簡單。

回到越界這塊,項(xiàng)目中用的是memcpy,然后因?yàn)橄虻谌浇涌趥魅肓艘粋€結(jié)構(gòu)體,需要檢查比如一段聊天內(nèi)容,可能檢測到不合法字段需要用星號代替,然后接口傳出一些數(shù)據(jù)包括長度,這里使用方需要拷貝數(shù)據(jù)(傳出的數(shù)據(jù)中申請的堆內(nèi)存由接口內(nèi)部釋放,不可用move等),如果接口承諾是二進(jìn)制安全的,那么是否有必要再多申請一個字節(jié)空間用于結(jié)束?

我大概看了下文檔,其實(shí)也并沒有看到這塊內(nèi)容,為了安全起見,還是在末尾加上空白符,防止造成各種內(nèi)存錯誤。

額外注意下memcpy,strcpy,strncpy,memmove等實(shí)現(xiàn)原理。C/C++這么語言不簡單。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容