containsnull.txt $-6ren">
gpt4 book ai didi

bash - 如何创建文件名中包含空字节的文件?

转载 作者:行者123 更新时间:2023-12-05 00:39:54 24 4
gpt4 key购买 nike

对于安全测试,我需要传递一个在其内容和文件名中包含空字符的文件。

对于正文内容,很容易使用printf:

$ printf "Hello\00, Null!" > containsnull.txt
$ xxd contains.null
0000000: 4865 6c6c 6f00 2c20 4e75 6c6c 21 Hello., Null!

但是如何创建名称中包含空字节的文件?

注意:如果可能,最好使用 bashpythonnodejs 中的解决方案

最佳答案

通过 POSIX 或 Windows API 创建包含空字节的文件名是不可能的。在我所知道的所有 Unix 系统上,即使使用绕过正常 API 的行为不良的应用程序,也不可能创建包含空字节的文件名,因为内核本身将其所有文件名输入视为空- 终止的字符串。我相信这在 Windows 上也是如此,但我不完全确定。

作为应用程序程序员,就安全性而言,这意味着如果您确定所拥有的是文件名,则无需担心文件名包含空字节。另一方面,如果给您一个字符串并告诉您将其用作文件名,例如,如果您正在编写服务器并让客户端选择文件名,则需要确保该字符串不包含 null字节。这只是其他要求之一,包括字符串长度、是否存在目录分隔符(/\)、保留名称(...、保留的 Windows 文件名,例如 nul.txtprn) 等。在大多数 Unix 系统上,在其 native 文件系统上,约束对于一个文件名是:没有空字节或斜杠,长度在 1 和某个最大值之间,并且两个名称 ... 是保留的。 Windows 和 Unix 上的非本地文件系统有额外的限制(可以通过 Windows 上的直接内核调用将 / 放在文件名中)。

要在文件内容中放入空字节,只需使用任何允许字符串中包含空字节的语言将字符串写入文件即可。在 bash 中,不能在字符串中存储空字节,因此需要使用另一种方法,例如 printf '\0'echo "abc"| tr b '\0'.

关于bash - 如何创建文件名中包含空字节的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54205087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com