转自:
http://www.ibm.com/developerworks/cn/security/buffer-defend/index.html
函数 |
严重性 |
解决方案 |
gets |
最危险 |
使用 fgets(buf, size, stdin)。这几乎总是一个大问题! |
strcpy |
很危险 |
改为使用 strncpy。 |
strcat |
很危险 |
改为使用 strncat。 |
sprintf |
很危险 |
改为使用 snprintf,或者使用精度说明符。 |
scanf |
很危险 |
使用精度说明符,或自己进行解析。 |
sscanf |
很危险 |
使用精度说明符,或自己进行解析。 |
fscanf |
很危险 |
使用精度说明符,或自己进行解析。 |
vfscanf |
很危险 |
使用精度说明符,或自己进行解析。 |
vsprintf |
很危险 |
改为使用 vsnprintf,或者使用精度说明符。 |
vscanf |
很危险 |
使用精度说明符,或自己进行解析。 |
vsscanf |
很危险 |
使用精度说明符,或自己进行解析。 |
streadd |
很危险 |
确保分配的目的地参数大小是源参数大小的四倍。 |
strecpy |
很危险 |
确保分配的目的地参数大小是源参数大小的四倍。 |
strtrns |
危险 |
手工检查来查看目的地大小是否至少与源字符串相等。 |
realpath |
很危险(或稍小,取决于实现) |
分配缓冲区大小为 MAXPATHLEN。同样,手工检查参数以确保输入参数不超过 MAXPATHLEN。 |
syslog |
很危险(或稍小,取决于实现) |
在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。 |
getopt |
很危险(或稍小,取决于实现) |
在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。 |
getopt_long |
很危险(或稍小,取决于实现) |
在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。 |
getpass |
很危险(或稍小,取决于实现) |
在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。 |
getchar |
中等危险 |
如果在循环中使用该函数,确保检查缓冲区边界。 |
fgetc |
中等危险 |
如果在循环中使用该函数,确保检查缓冲区边界。 |
getc |
中等危险 |
如果在循环中使用该函数,确保检查缓冲区边界。 |
read |
中等危险 |
如果在循环中使用该函数,确保检查缓冲区边界。 |
bcopy |
低危险 |
确保缓冲区大小与它所说的一样大。 |
fgets |
低危险 |
确保缓冲区大小与它所说的一样大。 |
memcpy |
低危险 |
确保缓冲区大小与它所说的一样大。 |
snprintf |
低危险 |
确保缓冲区大小与它所说的一样大。 |
strccpy |
低危险 |
确保缓冲区大小与它所说的一样大。 |
strcadd |
低危险 |
确保缓冲区大小与它所说的一样大。 |
strncpy |
低危险 |
确保缓冲区大小与它所说的一样大。 |
vsnprintf |
低危险 |
确保缓冲区大小与它所说的一样大。 |
posted on 2007-07-10 11:46
破茧而出 阅读(2023)
评论(0) 编辑 收藏 所属分类:
C/C++