【问题标题】:How to mitigate the strcat and strcmp vulnerability?如何缓解 strcat 和 strcmp 漏洞?
【发布时间】:2014-02-02 23:14:55
【问题描述】:

我知道strcpystrcatstrcmp的大厅家族有缓冲区溢出漏洞,为了缓解strcpy漏洞可以使用strlcpystrcat和@987654327呢@,是否有该函数的安全版本或者必须手动检查变量?

【问题讨论】:

  • strcmp() 不是很“脆弱”——它不会写入缓冲区,所以除非你忘记 0 终止你的 char 数组,否则应该没问题。至于strcat(),还是避而远之吧。我通常将其替换为snprintf()
  • 如果您的平台上有strlcpy,那么您可能也有strlcat

标签: c security strcmp strcpy strcat


【解决方案1】:

我推荐 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-functions 您仍然需要知道这一点。李>
  4. 问题主要在于将输入读入一些最终缓冲区。你不能使用scanf 或gets,你可以使用fgets。 例如:不要使用gets从标准输入中读取字符串,而是使用fgets如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2022-01-19
    • 1970-01-01
    • 2016-06-04
    相关资源
    最近更新 更多