路径中的斜线是否有替代方案?
Is there an alternative for the slash in a path?
我有一个应用程序可以正确转义文件名中的斜杠 ("/) 以避免路径遍历攻击。
秘密文件有这个路径:
/tmp/secret.txt
我想通过上传一个带有特制文件名(类似于 \/tmp\/secret.txt
)的文件来访问此文件
是否有任何我可以使用的不带斜杠的替代语法,以便 Linux 读取此文件?
(我知道 URL 编码,但由于转义是在后端完成的,所以这对我没有用。)
没有。文件名中不允许使用 /
,无论是否转义为 \/
。
它是 不允许 出现在文件名中的两个字符之一,另一个是 [=13=]
.
这意味着您显然可以使用 _tmp_secret.txt
或 -tmp-secret.txt
,或将路径中的 /
替换为您想要的任何其他字符,以创建具有路径的文件名"encoded into it"。但是在这样做时,您可以 not 对在其一个或多个路径组件中包含所选定界符的路径名进行编码,并期望将其解码为原始路径名。
顺便说一句,这就是 OpenBSD 的端口系统如何为软件补丁编码文件名。在(例如)/usr/ports/shells/fish/patches
中,我们找到名称类似于
的文件
patch-share_tools_create_manpage_completions_py
来自 fish
shell 源分发(可能 share/tools/create_manpage_completions.py
)中特定文件的路径名。然而,这些路径名 从未被解析 ,并且编码只是为了为补丁本身创建唯一且有点可理解的文件名。 真正的路径包含在补丁文件中。
我有一个应用程序可以正确转义文件名中的斜杠 ("/) 以避免路径遍历攻击。
秘密文件有这个路径:
/tmp/secret.txt
我想通过上传一个带有特制文件名(类似于 \/tmp\/secret.txt
)的文件来访问此文件
是否有任何我可以使用的不带斜杠的替代语法,以便 Linux 读取此文件?
(我知道 URL 编码,但由于转义是在后端完成的,所以这对我没有用。)
没有。文件名中不允许使用 /
,无论是否转义为 \/
。
它是 不允许 出现在文件名中的两个字符之一,另一个是 [=13=]
.
这意味着您显然可以使用 _tmp_secret.txt
或 -tmp-secret.txt
,或将路径中的 /
替换为您想要的任何其他字符,以创建具有路径的文件名"encoded into it"。但是在这样做时,您可以 not 对在其一个或多个路径组件中包含所选定界符的路径名进行编码,并期望将其解码为原始路径名。
顺便说一句,这就是 OpenBSD 的端口系统如何为软件补丁编码文件名。在(例如)/usr/ports/shells/fish/patches
中,我们找到名称类似于
patch-share_tools_create_manpage_completions_py
来自 fish
shell 源分发(可能 share/tools/create_manpage_completions.py
)中特定文件的路径名。然而,这些路径名 从未被解析 ,并且编码只是为了为补丁本身创建唯一且有点可理解的文件名。 真正的路径包含在补丁文件中。