格式字串漏洞以及使用 C 中示例的預防
格式字串 − 它是一種用於格式化字串的 ASCII 字串。它是一個由文字和格式化引數組成的 ASCII 字串。
在 C 中,有多種格式字串用於格式化程式的輸出。
格式字串漏洞
這些缺陷是由程式設計人員可能輕鬆犯下的程式設計中的錯誤引起的。如果將任何此類容易出錯的程式碼部落格傳遞給像printf、sprintf等輸出函式,那麼將對目標記憶體地址執行寫操作。
示例
#include<stdio.h> #include<string.h> int main(){ char buffer[100]; strncpy(buffer, "Hii ", 5); printf(buffer); return 0; }
預防
可以採取一些措施來防止格式字串漏洞
嘗試將格式字串用作程式的一部分,而不是輸入資料。可以使用“%s”字串格式輕鬆解決這些問題。
使用常量來建立格式字串,並提取所有的變數字串作為函式呼叫的引數,而不是將它們用在常量字串中。
對於無法遵循常量和變數字串初始化規範的情況,使用格式保護。
廣告