相关疑难解决方法(0)

C标准库中的哪些功能通常会鼓励不良做法?

这是受到这个问题以及对一个特定答案的评论的启发,我strncpy在C 中学到了这不是一个非常安全的字符串处理函数,它会填充零,直到它到达n,我不知道的东西.

具体来说,引用R ..

strncpy不会为null终止,并且会对目标缓冲区的其余部分进行空填充,这是一个巨大的浪费时间.您可以通过添加自己的空填充来解决前者,但不能添加后者.它从未打算用作"安全字符串处理"功能,但是用于处理Unix目录表和数据库文件中的固定大小字段.snprintf(dest,n,"%s",src)是标准C中唯一正确的"安全strcpy",但它可能会慢很多.顺便说一下,截断本身可能是一个主要的错误,并且在某些情况下可能会导致权限提升或DoS,因此抛出"安全"字符串函数会在问题中截断其输出并不是使其"安全"或"安全".相反,您应该确保目标缓冲区的大小合适,并且只需使用strcpy(或者更好的是,如果您已经知道源字符串长度,则使用memcpy).

来自Jonathan Leffler

请注意,strncat()在其接口中比strncpy()更令人困惑 - 这个长度参数到底又是什么?根据你提供的strncpy()等,它不是你所期望的 - 所以它甚至比strncpy()更容易出错.为了复制字符串,我越来越认为有一个强烈的论据,你只需要memmove(),因为你总是提前知道所有的大小,并确保提前有足够的空间.使用memmove()优先于strcpy(),strcat(),strncpy(),strncat(),memcpy()中的任何一个.

所以,我在C标准库上显然有些生疏.因此,我想提出一个问题:

哪些C标准库函数使用不当/可能导致/导致安全问题/代码缺陷/效率低下?

为了客观性,我有一些答案的标准:

  • 如果可以,请引用相关功能背后的设计原因,即其预期目的.
  • 请突出显示当前代码的误用情况.
  • 请说明滥用可能导致问题的原因.我知道这应该是显而易见的,但它会阻止软答案.

请避免:

  • 关于函数命名约定的争论(除非这明显引起混淆).
  • "我更喜欢x而不是y" - 偏好是可以的,我们都拥有它们,但我对实际出乎意料的副作用以及如何防范它们感兴趣.

由于这可能被认为是主观的,并且没有明确的答案,我正在为社区维基立刻做好准备.

我也按照C99工作.

c security c99 standard-library

54
推荐指数
6
解决办法
6947
查看次数

标签 统计

c ×1

c99 ×1

security ×1

standard-library ×1