检查双点是不是足以防止路径越狱?

Posted

技术标签:

【中文标题】检查双点是不是足以防止路径越狱?【英文标题】:Is checking for double dots enough to prevent paths from escaping jail?检查双点是否足以防止路径越狱? 【发布时间】:2012-10-29 21:59:44 【问题描述】:

我正在编写一个通过网络发送请求文件内容的服务。但是,我只会回答来自固定parent 目录的文件的请求。

首先想到的潜在安全问题是恶意用户可能会请求嵌入.. 的路径。另一个潜在的问题是符号链接,尽管这些应该不是问题,因为我控制本地文件系统,parent 下不会有任何符号链接。

因此,我的问题是检查路径组件中是否存在.. 是否足够。还是我忘记了其他一些安全漏洞?

【问题讨论】:

由于您不考虑我的回答中建议的规范化方法,请提供更多细节。什么操作系统?您使用什么 API 来获取文件?一个包罗万象的答案几乎是不可能的。 【参考方案1】:

另一种方法是

规范化/规范化请求的路径 检查(规范化的)父目录是否是请求路径的前缀

这样你就可以绝对确定。这需要一个正常工作的规范器。使用您的编程环境提供的一种,例如path.normalize()、readlink -f 等。

如果没有,从安全角度来说,自己编写是没有问题的。你把你知道的东西标准化('..' 加一 - 或者你忽略它,使它成为非法的),剩下的东西将被上面的检查拒绝。这应该是显而易见的,但当然您以后只能使用规范化路径来访问文件,而不是用户提供的路径。

您应该确保规范化的父目录以斜杠结尾(或反斜杠,如果在 Windows 上),否则用户可以访问与 parentDir 相同级别且以与 parentDir 相同字符开头的文件夹.

【讨论】:

是的,我知道规范化方法。但是,如果我最初的问题的答案是坚决的“是”,这似乎是一个蛮力解决方案。因此,我最初的问题是…… 这是一个 100% 有效的解决方案。很难保证你的方法。你忽略了一件事,那就是你的安全漏洞。所以在实践中,为了安全起见,我可能更喜欢规范化。 Otoh 作为一个一般性问题,我也觉得它很有趣。【参考方案2】:

不要忘记双斜杠example//path。一些系统将这些视为/path

【讨论】:

你有例子吗?我一直看到它在类 Unix 系统上被视为单斜线。

以上是关于检查双点是不是足以防止路径越狱?的主要内容,如果未能解决你的问题,请参考以下文章

dirname 是不是足以防止目录遍历攻击?

用 < 和 > 替换 : < 和 > 是不是足以防止 XSS 注入?

是否使用 access-control-allow-origin 足以防止滥用 api?

这足以防止 SQL 注入吗?

参数真的足以防止 Sql 注入吗?

检查输入的值是不是存在 IF 是 防止保存 否则