- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 456字
- 2020-10-30 17:56:45
2.6.2 輸入驗(yàn)證
緩解緩沖區(qū)溢出的最好方式是防止它們。要做到這點(diǎn)需要開發(fā)人員來(lái)防止字符串或內(nèi)存拷貝溢出他們的目標(biāo)緩沖區(qū)。可以通過(guò)確保輸入數(shù)據(jù)不超過(guò)用來(lái)存儲(chǔ)它的最小的緩沖區(qū)的大小來(lái)防止緩沖區(qū)溢出。例2.15是一個(gè)簡(jiǎn)單的執(zhí)行輸入驗(yàn)證的函數(shù)。
例2.15 輸入驗(yàn)證
1 void f(const char *arg) { 2 char buff[100]; 3 if (strlen(arg) >= sizeof(buff)) { 4 abort(); 5 } 6 strcpy(buff, arg); 7 /* ... */ 8 }
任何到達(dá)某個(gè)跨越信任邊界的程序接口的數(shù)據(jù)都需要驗(yàn)證。這類數(shù)據(jù)的例子包括main()函數(shù)的argv和argc參數(shù)、環(huán)境變量,以及從套接字、管道、文件、信號(hào)、共享內(nèi)存和設(shè)備中讀取的數(shù)據(jù)。
雖然這個(gè)例子只涉及字符串的長(zhǎng)度,但還有許多其他類型的驗(yàn)證可以執(zhí)行。例如,要被發(fā)送到SQL數(shù)據(jù)庫(kù)的輸入,將需要驗(yàn)證,以檢測(cè)和防止SQL注入攻擊。如果輸入最終可能會(huì)跳到一個(gè)網(wǎng)頁(yè),那么它也應(yīng)該被驗(yàn)證,以防止跨站點(diǎn)腳本(Gross-Site Scripting XSS)攻擊。
幸運(yùn)的是,輸入驗(yàn)證適用于所有類別的字符串漏洞,但它需要開發(fā)人員正確識(shí)別和驗(yàn)證可能會(huì)導(dǎo)致緩沖區(qū)溢出或其他漏洞的所有外部輸入。因?yàn)檫@個(gè)過(guò)程很容易產(chǎn)生錯(cuò)誤,為謹(jǐn)慎起見,這個(gè)緩解策略通常需要與其他策略(例如,用更安全的函數(shù)替換可疑的函數(shù))結(jié)合使用。
- iOS Game Programming Cookbook
- C及C++程序設(shè)計(jì)(第4版)
- Oracle從入門到精通(第3版)
- 零基礎(chǔ)PHP學(xué)習(xí)筆記
- Windows系統(tǒng)管理與服務(wù)配置
- 羅克韋爾ControlLogix系統(tǒng)應(yīng)用技術(shù)
- Internet of Things with the Arduino Yún
- Java軟件開發(fā)基礎(chǔ)
- 單片機(jī)應(yīng)用與調(diào)試項(xiàng)目教程(C語(yǔ)言版)
- Getting Started with React Native
- 21天學(xué)通C++(第5版)
- 細(xì)說(shuō)Python編程:從入門到科學(xué)計(jì)算
- Spring Boot實(shí)戰(zhàn)
- 從程序員角度學(xué)習(xí)數(shù)據(jù)庫(kù)技術(shù)(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- jQuery技術(shù)內(nèi)幕:深入解析jQuery架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理