鱼C论坛

 找回密码
 立即注册
查看: 9202|回复: 13

[技术交流] C语言中不安全的函数以及解决方案

[复制链接]
发表于 2012-8-1 03:49:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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低危险确保缓冲区大小与它所说的一样大。



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 07:17:12 | 显示全部楼层
以前还真没注意这些,记下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 07:34:24 | 显示全部楼层
怎么危险了,菜鸟我表示想掉进陷阱都不知道往老掉,囧。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 08:55:25 | 显示全部楼层
鱼哥,关于缓冲溢出这方面的视频教程什么时候出啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 09:04:03 | 显示全部楼层
经常用这些函数,没发现什么问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 10:54:14 | 显示全部楼层
先记下了,收藏。以后可能需要看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 11:48:25 | 显示全部楼层
函数有什么危险不危险之说?    要懂得内部的实现原理,就可以随心所欲的用,怎么能根据危险与不危险这样的理论去用?????????每个函数都有自己独特的功能。

个人认为这是对新人的一个误导。。。老手从来不纠结与几个函数,新手就是要在不断的错误中成长,只有用的时候出错了,才会去懂得这个函数的功能,明白实现原理。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 13:34:36 | 显示全部楼层
先记下看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-1 14:37:41 | 显示全部楼层
学习了:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-1 15:19:18 | 显示全部楼层

有提供解决的对策和方案,函数当初在刚开始设计的时候都是很善意的,并没有考虑到缓冲区溢出的存在,需要我们编写开发程序的时候注意多设点检查。否则这些都是被溢出的切入点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-7 14:45:25 | 显示全部楼层
一般都是用户输入问题
没有限制大小 用户可以自己构造一段代码执行 这点安全书上很多说的
解决方法只有一个 就是用安全的函数 gets直接忘记就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-10-3 22:41:05 | 显示全部楼层
此贴必火,‘留’芳百世.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-5 18:19:49 | 显示全部楼层
MARK!!!!!!!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-23 12:11:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-30 15:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表