检查双点是不是足以防止路径越狱?
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 系统上被视为单斜线。以上是关于检查双点是不是足以防止路径越狱?的主要内容,如果未能解决你的问题,请参考以下文章
用 < 和 > 替换 : < 和 > 是不是足以防止 XSS 注入?