对于安全测试,我需要传递一个内容和文件名中包含空字符的文件。
对于body内容来说,很容易使用printf
:
$ printf "Hello\00, Null!" > containsnull.txt
$ xxd contains.null
0000000: 4865 6c6c 6f00 2c20 4e75 6c6c 21 Hello., Null!
但是如何创建名称中包含空字节的文件呢?
注:解决方案为bash
, python
or nodejs
如果可能的话是首选
通过 POSIX 或 Windows API 不可能创建包含空字节的文件名。在我所知道的所有 Unix 系统上,即使使用绕过正常 API 的行为不当的应用程序,也不可能创建包含空字节的文件名,因为内核本身将其所有文件名输入视为空- 终止的字符串。我相信 Windows 上也是如此,但我不完全确定。
作为应用程序程序员,就安全性而言,这意味着如果您确定您拥有的是文件名,则无需担心包含空字节的文件名。另一方面,如果给你一个字符串并告诉你将其用作文件名,例如,如果你正在编写服务器并让客户端选择文件名,则需要确保该字符串不包含 null字节。这只是其他要求之一,包括字符串长度、目录分隔符的存在(/
or \
), 保留名称 (.
and ..
、保留的 Windows 文件名,例如nul.txt
or prn
) 等。在大多数 Unix 系统上,在其本机文件系统上,文件名的约束是:没有空字节或斜线、长度在 1 和某个最大值之间、以及两个名称.
and ..
被保留。 Windows 和 Unix 上的非本机文件系统有额外的限制(可以将/
在 Windows 上通过直接内核调用在文件名中)。
要将空字节放入文件内容中,只需使用允许字符串中包含空字节的任何语言将字符串写入文件即可。在bash中,您不能在字符串中存储空字节,因此您需要使用另一种方法,例如printf '\0'
or echo "abc" | tr b '\0'
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)