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

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)中特定文件的路径名。然而,这些路径名 从未被解析 ,并且编码只是为了为补丁本身创建唯一且有点可理解的文件名。 真正的路径包含在补丁文件中。