- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 456字
- 2020-10-30 17:56:45
2.6.2 輸入驗證
緩解緩沖區溢出的最好方式是防止它們。要做到這點需要開發人員來防止字符串或內存拷貝溢出他們的目標緩沖區。可以通過確保輸入數據不超過用來存儲它的最小的緩沖區的大小來防止緩沖區溢出。例2.15是一個簡單的執行輸入驗證的函數。
例2.15 輸入驗證
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 }
任何到達某個跨越信任邊界的程序接口的數據都需要驗證。這類數據的例子包括main()函數的argv和argc參數、環境變量,以及從套接字、管道、文件、信號、共享內存和設備中讀取的數據。
雖然這個例子只涉及字符串的長度,但還有許多其他類型的驗證可以執行。例如,要被發送到SQL數據庫的輸入,將需要驗證,以檢測和防止SQL注入攻擊。如果輸入最終可能會跳到一個網頁,那么它也應該被驗證,以防止跨站點腳本(Gross-Site Scripting XSS)攻擊。
幸運的是,輸入驗證適用于所有類別的字符串漏洞,但它需要開發人員正確識別和驗證可能會導致緩沖區溢出或其他漏洞的所有外部輸入。因為這個過程很容易產生錯誤,為謹慎起見,這個緩解策略通常需要與其他策略(例如,用更安全的函數替換可疑的函數)結合使用。
推薦閱讀
- 計算機網絡
- iOS Game Programming Cookbook
- C#高級編程(第10版) C# 6 & .NET Core 1.0 (.NET開發經典名著)
- JavaScript:Functional Programming for JavaScript Developers
- Flash CS6中文版應用教程(第三版)
- 碼上行動:用ChatGPT學會Python編程
- UVM實戰
- Creating Mobile Apps with jQuery Mobile(Second Edition)
- Solr Cookbook(Third Edition)
- Python網絡爬蟲技術與應用
- Learning Ionic
- OpenCV Android Programming By Example
- Hands-On Dependency Injection in Go
- 數字媒體技術概論
- 透視C#核心技術:系統架構及移動端開發