Rou*_*per 4 c c++ security stl strcpy
假设我有一些遗留代码是使用对C STL函数的不安全调用编写的strcpy
.我们都知道这strcpy
是不安全的,因为它使程序容易受到缓冲区溢出问题的影响.假设我要将所有调用替换为strcpy
调用strncpy
.一种用于替换所有技术调用strcpy(dest, src)
将涉及调用strncpy
与参数(dest, src, length of dest - 1)
,然后终止dest
与\0
.我知道这个问题是我们并不总是知道它的长度,dest
因为它可能是指向堆上分配的内存的指针.
我们假设我可以计算出dest
每个呼叫站点的长度.我可以取代所有调用strcpy
与调用strncpy
,这将保证我的计划是不受缓冲区溢出攻击(至少从使用不当的strcpy
).但是,这种方法可能会以不合需要的方式默默地截断数据并改变程序行为.这比检测截断和中止程序更好吗?或者是允许截断还是记录它更好吗?
我是从有兴趣开发修补遗留代码的自动方法的人的角度问的.有没有人对如何最好地解决这个问题有任何想法?
我们都知道这
strcpy
是不安全的,因为它使程序容易受到缓冲区溢出问题的影响.
这不是strcpy
最轻微的错误:程序员需要确保字符串适合其缓冲区,例如,通过strlen
在复制之前调用,或确保进入的字符串不能长于他们的缓冲.
假设我要将所有调用替换为
strcpy
调用strncpy
除非使用固定大小的字符串,否则不应该这样做:请记住,strncpy
不仅要复制到终止空字符串,还要使用空字节填充字符串的其余部分.如果您正在寻找"现代替代品" strcpy
,请考虑使用strlcpy
.
这种方法可能会以不合需要的方式无声地截断数据并改变程序行为.这比检测截断和中止程序更好吗?或者是允许截断还是记录它更好吗?
这完全取决于你.这取决于您的设计中发生此类截断的位置:如果它发生在将身份验证信息发送到Web服务的代码中,那么最好立即停止该过程; 如果它发生在将跟踪消息写入日志的代码中,则可以忽略该问题,或者记录并继续.遗憾的是,您无法自动决定,因为需要一定程度的程序理解.
归档时间: |
|
查看次数: |
2777 次 |
最近记录: |