路径中的斜线是否有替代方案?

时间:2018-04-20 14:23:00

标签: linux filenames slash

我有一个应用程序正确地转义文件名中的斜杠(“/”)以避免路径遍历攻击。

秘密文件有这条路径: /tmp/secret.txt

我想通过上传带有特制文件名的文件来访问此文件(类似\/tmp\/secret.txt

是否有没有我可以使用的斜杠的替代语法,以便Linux读取此文件?

(我知道URL编码,但由于在后端进行了转义,这对我没用。)

1 个答案:

答案 0 :(得分:3)

没有。文件名中不允许/,无论它是否以\/转义。

只有两个字符中的一个允许在文件名中,另一个是\0

这意味着您显然可以使用_tmp_secret.txt-tmp-secret.txt,或者将路径中的/替换为您希望的任何其他字符,以创建带有“编码”路径的文件名进去”。但是在这样做时,您可以编码在其一个或多个路径组件中包含所选分隔符的路径名,并期望将其解码为原始路径名。

顺便说一下,这是OpenBSD的ports系统如何将补丁的文件名编码为软件。在(例如)/usr/ports/shells/fish/patches中,我们找到名称为

的文件
patch-share_tools_create_manpage_completions_py

来自fish shell源代码分发中的特定文件的路径名(可能是share/tools/create_manpage_completions.py)。然而,这些路径名从未被解析,并且编码仅用于为补丁本身创建唯一且有些可理解的文件名。 真实的路径包含在补丁文件中。