[轉載]C語言防止緩沖區溢出方法
C語言使用直接的內存訪問,緩沖區溢出是經常出現的安全問題。
下面將介紹常見的緩沖區溢出,及防止方法。
1、判斷邊界
例程序:
void outstr(int a[10])
{
for(i=0;a[i]!=0&&i<10;i++)
{
printf("%d\n",a[i]);
}
}
當i=10時,判斷i<10同時需要判斷a[i]!=0,
此時a[10]已經訪問到非法區域,可能引起緩沖區溢出問題。
防止方法:將判斷條件分成幾條語句
例:
if(i<10){
if(a[i]!=0){
...
}
}
2、字符串操作
C語言的字符串庫沒有安全保護,在使用時要特別小心。
strcpy、strcat等函數操作時沒有檢查緩沖區大小,容易引起安全問題。
防止方法:
1)使用strncpy、strncat,限制拷貝字符串長度。
2)或者是在strcpy、strcat之前檢查緩沖區大小是否滿足要求。
3、free
free后指針不是NULL。所以判斷指針是否為NULL并不能保證指針有效。
防止方法:在free后重置指針。
free(p);p=NULL;
4、指針未初始化
指針未初始化便引用。指針初始值未知,無法根據值判定指針是否有效。
指針聲明后盡快初始化,如不能初始化為有效值,也要初始化為NULL。
防止方法:每次使用指針,不能確定指針有效時,先判斷指針是否為NULL。
posted on 2007-07-22 02:16 旅途 閱讀(621) 評論(0) 編輯 收藏 引用 所屬分類: C/C++