C语言中不安全的函数以及解决方案
C语言里边一些不安分因素,初学者建议看下。这些函数由于设计的时候比较淳朴,并没有做任何的越界检测,主要容易"被溢出",只需要多设点检查边界,即安全。
函数严重性解决方案
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低危险确保缓冲区大小与它所说的一样大。
以前还真没注意这些,记下。 怎么危险了,菜鸟我表示想掉进陷阱都不知道往老掉,囧。。 鱼哥,关于缓冲溢出这方面的视频教程什么时候出啊? 经常用这些函数,没发现什么问题啊{:5_94:} {:5_102:}先记下了,收藏。以后可能需要看。 函数有什么危险不危险之说? 要懂得内部的实现原理,就可以随心所欲的用,怎么能根据危险与不危险这样的理论去用?????????每个函数都有自己独特的功能。
个人认为这是对新人的一个误导。。。老手从来不纠结与几个函数,新手就是要在不断的错误中成长,只有用的时候出错了,才会去懂得这个函数的功能,明白实现原理。。。 先记下看看 学习了:lol Tzdner_C 发表于 2012-8-1 11:48 static/image/common/back.gif
函数有什么危险不危险之说? 要懂得内部的实现原理,就可以随心所欲的用,怎么能根据危险与不危险这样的 ...
有提供解决的对策和方案,函数当初在刚开始设计的时候都是很善意的,并没有考虑到缓冲区溢出的存在,需要我们编写开发程序的时候注意多设点检查。否则这些都是被溢出的切入点。 一般都是用户输入问题
没有限制大小 用户可以自己构造一段代码执行 这点安全书上很多说的
解决方法只有一个 就是用安全的函数 gets直接忘记就好了 此贴必火,‘留’芳百世. MARK!!!!!!!!!!!!!!!!!!!! {:10_269:}
页:
[1]