如何缓解strcat和strcmp漏洞?

时间:2014-01-14 18:34:30

标签: c security strcmp strcpy strcat

我知道strcpystrcatstrcmp的大厅系列存在缓冲区溢出漏洞,以减轻某人可以使用strcpy漏洞的strlcpy漏洞那么strcatstrcmp怎么样,那些函数的安全版本还是有人必须手动检查变量?

1 个答案:

答案 0 :(得分:3)

我推荐str-n-func系列:

使用strncpy而不是strcpy,strncat而不是strcat,strncmp而不是strcmp,依此类推。

附加n用于附加(第三)参数,即复制/连接/比较的最大字符数。

在这里阅读它们(附例子):

http://www.cplusplus.com/reference/cstring/strncmp/

http://www.cplusplus.com/reference/cstring/strncat/

<强>说明

  1. strlcpy和strlcat函数不是标准函数。
  2. 你应该小心,因为(例如)从包含超过n个字符的字符串(直到第一个空字符)复制最多n个字符,将以一个非空终止的字符串结束。
  3. 通常,作为程序员,您可以选择知道您处理的字符串的长度,并且因为前面的注释,即使您使用str-n函数,您仍然需要知道这一点。
  4. 问题主要在于读取一些最终缓冲区的输入。你不能使用scanf或gets,你可以使用fgets。 例如:不使用gets从标准输入中读取字符串,而是使用fgets,如下所示:

    fgets(str,sizeof(str),stdin);