【问题标题】:Why doesn't readlink return a null-terminated value?为什么 readlink 不返回以 null 结尾的值?
【发布时间】:2020-11-28 22:13:04
【问题描述】:

The Single UNIX ® Specification, Version 2 (1997) 和 The Open Group Base Specifications Issue 6 (2004) 都要求 readlink 不会在 buffer 中放置以空值结尾的值:

应用用途

符合标准的应用程序不应假定符号链接的返回内容是以空值结尾的。

buffer 不以 null 结尾的注意事项是什么? readlink使用不当会不会带来安全隐患?

【问题讨论】:

  • 如果使用不当,任何事情都可能带来安全风险。

标签: linux linux-kernel posix system-calls readlink


【解决方案1】:

非空终止缓冲区有哪些注意事项?

如文档所示,可移植性。很可能存在(-ed?)readlink 的广泛使用的实现,它们不会以空值终止缓冲区。

如果没有正确使用 readlink 会不会带来安全风险?

我猜每段使用不当的错误代码都会带来安全风险。程序员负责编写没有安全风险的好代码。 posix 页面的示例部分显示了readlink 的正确用法。

【讨论】:

    【解决方案2】:

    我刚刚看了你的链接。

    使这个安全使用的一个简单方法是在函数返回时将零写入最后一个缓冲区位置。使用返回的大小。

    您应该仔细检查返回的大小值是否不是 -1 并且始终小于缓冲区长度。如果相等,则被截断(可能)。

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2022-12-26
      相关资源
      最近更新 更多