官术网_书友最值得收藏!

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é)合使用。

主站蜘蛛池模板: 开平市| 望奎县| 白城市| 五河县| 清丰县| 中方县| 兴化市| 河间市| 伽师县| 象州县| 广宗县| 新余市| 包头市| 高唐县| 营山县| 舟山市| 华阴市| 高雄县| 交口县| 海阳市| 彭阳县| 北海市| 八宿县| 德保县| 云安县| 合川市| 运城市| 汪清县| 金华市| 隆安县| 盐边县| 阿坝县| 蓝田县| 虞城县| 永兴县| 柘城县| 永定县| 太仆寺旗| 依安县| 龙游县| 涟水县|