乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      教你幾招消滅代碼漏洞的方法

       長(zhǎng)沙7喜 2021-11-23
      指針釋放完后必須置為空指針

      指針釋放沒處理好,容易引發(fā)高風(fēng)險(xiǎn)漏洞:內(nèi)存破壞漏洞。

      在編程中對(duì)指針進(jìn)行釋放后,需要將該指針設(shè)置為NULL,以防止后續(xù)free指針的誤用,從而導(dǎo)致UAF (Use After Free)等其他內(nèi)存破壞問題。尤其在結(jié)構(gòu)體、類里面存儲(chǔ)的原始指針。

      錯(cuò)誤釋放指針范例

      圖片

      正確釋放指針范例

      圖片

      針對(duì)指針釋放建議的解決方案:建議使用string、vector、智能指針等代替原始內(nèi)存管理機(jī)制,這樣可以大量減少這類型的錯(cuò)誤。

      指針應(yīng)用時(shí)必須檢查空指針

      圖片
      圖片

      這類問題沒處理好,容易引發(fā)低風(fēng)險(xiǎn)的拒絕服務(wù)漏洞風(fēng)險(xiǎn)。

      下面是檢查空指針范例

      圖片

      注意檢查指針大小的方式

      圖片
      圖片

      檢查指針大小沒處理好,它會(huì)引發(fā)中風(fēng)險(xiǎn)邏輯漏洞的風(fēng)險(xiǎn)

      下面是檢查指針大小范例

      圖片

      智能指針使用安全

      圖片
      圖片

      智能指針如果沒應(yīng)用好,會(huì)引發(fā)高風(fēng)險(xiǎn)漏洞:內(nèi)存破壞漏洞

      在編程中使用智能指針時(shí)候,必須防止智能指針和原始指針混用,否則可能會(huì)導(dǎo)致對(duì)象生命周期問題,例如UAF安全風(fēng)險(xiǎn)。

      錯(cuò)誤的使用智能指針

      圖片

      正確的使用智能指針

      圖片

      防止錯(cuò)誤類型轉(zhuǎn)換

      圖片
      圖片

      類型轉(zhuǎn)換處理不好會(huì)引發(fā)高風(fēng)險(xiǎn)的漏洞:內(nèi)存破壞漏洞

      在編程中對(duì)指針、對(duì)象或變量進(jìn)行操作時(shí),需要能夠正確判斷所操作對(duì)象的原始類型。如果使用了與原始類型不兼容的類型進(jìn)行訪問操作,那么代碼就會(huì)存在安全的隱患。

      錯(cuò)誤類型轉(zhuǎn)換范例

      圖片

      正確使用類型轉(zhuǎn)換范例

      圖片

      不可直接使用無長(zhǎng)度限制的函數(shù)

      圖片
      圖片

      使用無長(zhǎng)度限制的的函數(shù),它會(huì)引發(fā)中風(fēng)險(xiǎn)漏洞和高風(fēng)險(xiǎn)漏洞:信息泄露漏洞和緩沖區(qū)溢出漏洞。

      不能直接使用無長(zhǎng)度限制的字符串拷貝、輸入函數(shù)、例如:strcpy、sprintf、wcscpy、mbscpy等函數(shù),這些函數(shù)的特征是:通過輸入一長(zhǎng)串字符串,而不限制長(zhǎng)度。如果環(huán)境允許,應(yīng)當(dāng)使用_s安全版本替代,或者使用n版本函數(shù)(如:snprintf,vsnprintf)。

      若使用形如sscanf之類的函數(shù)時(shí),在處理字符串輸入時(shí)應(yīng)該通過%10s這樣的方式來嚴(yán)格限制字符串長(zhǎng)度,同時(shí)確保字符串末尾有\(zhòng)0。如果環(huán)境允許應(yīng)該使用_s安全版本。

      在使用n系列拷貝函數(shù)時(shí),要確保正確計(jì)算緩沖區(qū)長(zhǎng)度,同時(shí),如果你不確定是否地面在各個(gè)編譯器下都能確保末尾有0時(shí)候,建議增加1字節(jié)輸入緩沖區(qū),并將其置為\0,以確保輸出的字符串結(jié)尾一定有\(zhòng)0。

      建議使用方案:在C++中,建議用string、vector等更高封裝層的基礎(chǔ)組件代替原始指針和動(dòng)態(tài)數(shù)組,可以有效提高代碼的可讀性和安全性。

      調(diào)用啟動(dòng)進(jìn)程類的系統(tǒng)函數(shù)的安全做法

      圖片
      圖片

      沒調(diào)用好啟動(dòng)進(jìn)程類的系統(tǒng)函數(shù),它會(huì)引發(fā)兩大高風(fēng)險(xiǎn)漏洞:代碼執(zhí)行漏洞和權(quán)限提升漏洞。

      在調(diào)用如 system、WinExec、CreateProcess、SheellExecute等啟動(dòng)進(jìn)程類的函數(shù),需要嚴(yán)格檢查函數(shù)的參數(shù)。

      當(dāng)啟動(dòng)時(shí)從用戶輸入、環(huán)境變量讀取組合命令行時(shí),還需要注意是否可能存在命令注入風(fēng)險(xiǎn)。最好進(jìn)行檢查用戶輸入是否含有非法數(shù)據(jù)。

      下面可以借鑒的范例

      圖片

      盡量不要使用_alloca和可變長(zhǎng)度數(shù)組

      圖片
      圖片

      使用_alloca和可變長(zhǎng)度數(shù)組,它可能會(huì)引發(fā)低風(fēng)險(xiǎn)和高風(fēng)險(xiǎn)漏洞:拒絕服務(wù)漏洞和內(nèi)存破壞漏洞。

      _alloca和可變長(zhǎng)度數(shù)組使用的內(nèi)存量在編譯期間是未知的,尤其是在循環(huán)中使用時(shí),根據(jù)編譯器的實(shí)現(xiàn)不同,可能會(huì)導(dǎo)致:1.棧溢出;2.缺少棧內(nèi)存測(cè)試的編譯器實(shí)現(xiàn)可能導(dǎo)致申請(qǐng)到非棧內(nèi)存,并導(dǎo)致內(nèi)存損壞。

      對(duì)于C++,可變長(zhǎng)度數(shù)組也是非標(biāo)準(zhǔn)擴(kuò)展,在代碼規(guī)范中禁止使用。

      圖片

      調(diào)用printf系列函數(shù),參數(shù)必須對(duì)應(yīng)

      圖片
      圖片

      調(diào)用printf系列函數(shù)沒處理好會(huì)引發(fā)中風(fēng)險(xiǎn)漏洞:信息泄露漏洞

      調(diào)用printf系列函數(shù),如sprintf,snprintf,vprintf等必須對(duì)應(yīng)控制符號(hào)和參數(shù)。

      圖片

      不要把用戶可修改字符串作為printf系列函數(shù)的“format”參數(shù)

      圖片
      圖片

      這個(gè)沒處理好,它會(huì)引發(fā)低風(fēng)險(xiǎn)、中風(fēng)險(xiǎn)和兩大高風(fēng)險(xiǎn)漏洞:拒絕服務(wù)、信息泄露、內(nèi)存破壞和代碼執(zhí)行漏洞。

      如果用戶可以控制字符串,則通過%n、%p等內(nèi)容,最壞情況洗可以直接執(zhí)行任意惡意代碼。

      圖片

      對(duì)數(shù)組delete時(shí)需要使用delete[]

      圖片
      圖片

      這個(gè)沒處理好,它會(huì)引發(fā)低風(fēng)險(xiǎn)、中風(fēng)險(xiǎn)和高風(fēng)險(xiǎn)漏洞:內(nèi)存泄漏、邏輯漏洞、內(nèi)存破壞漏洞

      delete []操作符用于刪除數(shù)組。delete操作符用于刪除非數(shù)組對(duì)象。它們分別調(diào)用operator delete[]和operator delete。

      建議的解決方案在C++代碼中,使用string、vector、智能指針(比如std::unique_ptr)等可以消除絕大多數(shù) delete[] 的使用場(chǎng)景,并且代碼更清晰。

      圖片

      使用switch中必須使用default

      圖片
      圖片

      編程中switch沒應(yīng)用好,它會(huì)引發(fā)兩大中風(fēng)險(xiǎn)漏洞:邏輯漏洞、內(nèi)存泄漏漏洞。

      switch中應(yīng)該有default,以處理各種預(yù)期外的情況。這可以確保switch接受用戶輸入,或者后期在其他開發(fā)者修改函數(shù)后確保switch仍可以覆蓋到所有情況,并確保邏輯正常運(yùn)行。

      圖片

      在debug版本或錯(cuò)誤信息中不提供過多信息。

      圖片
      圖片

      提供過多的信息,這會(huì)引發(fā)中風(fēng)險(xiǎn)的信息泄露漏洞。

      包含過多信息的Debug消息不應(yīng)當(dāng)被用戶獲取到。Debug信息可能會(huì)泄露一些值,例如內(nèi)存數(shù)據(jù)、內(nèi)存地址等內(nèi)容,這些內(nèi)容可以幫助攻擊者在初步控制程序后,更容易地攻擊程序。

      不能返回棧上變量的地址和使用未初始化棧變量

      圖片
      圖片

      這個(gè)情況,會(huì)引發(fā)高風(fēng)險(xiǎn)的內(nèi)存破壞漏洞。

      函數(shù)不可以返回棧上的變量的地址,它的內(nèi)容再函數(shù)返回后就會(huì)失效,可以用堆類傳遞簡(jiǎn)單類型變量。

      在棧上聲明的變量使用之前確認(rèn)是否已經(jīng)初始化了。最好是在聲明變量的時(shí)候,就直接初始化變量值。

      建議方案:強(qiáng)烈建議返回 string、vector 等類型,會(huì)讓代碼更加簡(jiǎn)單和安全。

      錯(cuò)誤的范例

      圖片

      正確的用法范例

      圖片

      函數(shù)的每個(gè)分支都應(yīng)該有返回值

      圖片
      圖片

      函數(shù)中的分支沒處理好,它會(huì)引發(fā)兩大中風(fēng)險(xiǎn)漏洞:信息泄露,邏輯漏洞。

      函數(shù)的每個(gè)分支都應(yīng)該有返回值,否則如果函數(shù)走到無返回值的分支,其結(jié)果是未知的。

      錯(cuò)誤用法的范例

      圖片

      正確用法的范例

      圖片

      在多線程中變量應(yīng)確保線程安全性

      圖片
      圖片

      線程中的變量沒處理好,它會(huì)引發(fā)兩大中風(fēng)險(xiǎn)漏洞:信息泄露,邏輯漏洞。

      當(dāng)一個(gè)變量可能被多個(gè)線程使用時(shí),應(yīng)當(dāng)使用原子操作或加鎖操作。

      建議解決方案:

      對(duì)于C代碼,C11 后推薦使用 atomic 標(biāo)準(zhǔn)庫(kù)。

      對(duì)于C++代碼,C++11后,推薦使用 std::atomic。

      錯(cuò)誤用法范例

      圖片

      正確用法范例

      圖片

      在程序中不得明文存儲(chǔ)敏感信息。

      圖片
      圖片

      存儲(chǔ)明文信息,它會(huì)引發(fā)高風(fēng)險(xiǎn)漏洞風(fēng)險(xiǎn):敏感信息泄露漏洞。

      用戶的敏感信息應(yīng)該使用加密算法進(jìn)行做處理,并做到傳輸過程中加密,存儲(chǔ)過程中加密,存儲(chǔ)狀態(tài)下加密。在程序運(yùn)行內(nèi)存中的用戶敏感信息應(yīng)該完全抹除。

      使用rand()類函數(shù)應(yīng)正確初始化

      圖片
      圖片

      編程中rand函數(shù)沒有正確初始化,它會(huì)引發(fā)邏輯漏洞的高風(fēng)險(xiǎn)漏洞。

      在編程中,rand類函數(shù)的隨機(jī)性并不高。而且在使用前需要使用srand()來初始化。未初始化的隨機(jī)數(shù)可能導(dǎo)致某些內(nèi)容可預(yù)測(cè)。

      圖片

      操作文件時(shí)候避免路徑穿越問題

      圖片
      圖片

      編程中,如果文件路徑?jīng)]處理好,它會(huì)引發(fā)高風(fēng)險(xiǎn)的邏輯漏洞。

      在進(jìn)行文件操作時(shí),需要判斷外部傳入的文件名是否合法,如果文件名中包含 ../ 等特殊字符,則會(huì)造成路徑穿越,導(dǎo)致任意文件的讀寫。

      圖片

      避免相對(duì)路徑導(dǎo)致被劫持的問題

      圖片
      圖片

      編程中相對(duì)路徑?jīng)]處理好會(huì)引發(fā)邏輯漏洞風(fēng)險(xiǎn)。

      在編程中,使用相對(duì)路徑可能導(dǎo)致一些安全風(fēng)險(xiǎn),例如DLL、EXE劫持等問題。

      針對(duì)DLL劫持編碼安全的建議:

      1. 調(diào)用LoadLibrary,LoadLibraryEx,CreateProcess,ShellExecute等進(jìn)行模塊加載的函數(shù)時(shí),指明模塊的完整(全)路徑,禁止使用相對(duì)路徑,這樣就可避免從其它目錄加載DLL。

      2. 在應(yīng)用程序的開頭調(diào)用SetDllDirectory(TEXT('')); 從而將當(dāng)前目錄從DLL的搜索列表中刪除。

        結(jié)合SetDefaultDllDirectories,AddDllDirectory,RemoveDllDirectory這幾個(gè)API配合使用,可以有效的規(guī)避DLL劫持問題。

      圖片

      文件權(quán)限控制

      圖片
      圖片

      編程中,文件權(quán)限沒處理好,它會(huì)引發(fā)中風(fēng)險(xiǎn)的邏輯漏洞風(fēng)險(xiǎn)。

      在創(chuàng)建文件時(shí),需要根據(jù)文件的敏感級(jí)別設(shè)置不同的訪問權(quán)限,以防止敏感數(shù)據(jù)被其他惡意程序讀取或?qū)懭搿?/p>

      圖片

      防止整數(shù)溢出

      圖片
      圖片

      在編程中,數(shù)據(jù)操作時(shí)候沒處理好,它會(huì)引發(fā)高風(fēng)險(xiǎn)的漏洞:內(nèi)存破壞。

      在計(jì)算時(shí)需要考慮整數(shù)溢出的可能,尤其在進(jìn)行內(nèi)存操作時(shí),需要對(duì)分配、拷貝等大小進(jìn)行合法校驗(yàn),防止整數(shù)溢出導(dǎo)致的漏洞。

      錯(cuò)誤用法范例

      圖片

      正確用法范例

      圖片

      防止Off-By-One漏洞

      圖片
      圖片

      計(jì)算和操作數(shù)據(jù)的時(shí)候沒處理好,它會(huì)引發(fā)高風(fēng)險(xiǎn)漏洞:內(nèi)存破壞

      在進(jìn)行計(jì)算或者操作時(shí),如果使用的最大值或最小值不正確,使得該值比正確值多1或少1,可能導(dǎo)致安全風(fēng)險(xiǎn)。

      解決方案:建議使用 string、vector 等組件代替原始指針和數(shù)組操作。

      圖片

      運(yùn)算時(shí)檢查除以零異常

      圖片
      圖片

      編程中,數(shù)據(jù)運(yùn)算沒檢查除以零的情況,它會(huì)引發(fā)低風(fēng)險(xiǎn)的漏洞:拒絕服務(wù)漏洞。

      在進(jìn)行除法運(yùn)算時(shí),需要判斷被除數(shù)是否為零,以防導(dǎo)致程序不符合預(yù)期或者崩潰。

      圖片

      防止數(shù)字類型的錯(cuò)誤強(qiáng)轉(zhuǎn)

      圖片
      圖片

      在編程中數(shù)值類型沒處理好,它會(huì)引發(fā)中風(fēng)險(xiǎn)邏輯漏洞和高風(fēng)險(xiǎn)內(nèi)存破壞漏洞。

      在有符號(hào)和無符號(hào)數(shù)字參與的運(yùn)算中,需要注意類型強(qiáng)轉(zhuǎn),它可能導(dǎo)致的邏輯錯(cuò)誤,建議指定參與計(jì)算時(shí)數(shù)字的類型或者統(tǒng)一類型參與計(jì)算。

      下圖是參考范例

      圖片

      比較數(shù)據(jù)大小時(shí)加上最小或最大值的校驗(yàn)

      圖片
      圖片

      編程中數(shù)據(jù)比較沒處理好,它會(huì)引發(fā)高風(fēng)險(xiǎn)的內(nèi)存破壞漏洞

      在編程中進(jìn)行數(shù)據(jù)大小比較時(shí),要合理地校驗(yàn)數(shù)據(jù)的區(qū)間范圍,建議根據(jù)數(shù)值類型,對(duì)其進(jìn)行最大和最小值的判斷,以防止非預(yù)期錯(cuò)誤。

      圖片

      E N D

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多