检查双点是否足以防止路径逃离监狱?

时间:2012-10-29 21:59:45

标签: security http sanitization

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

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

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

2 个答案:

答案 0 :(得分:3)

另一种方法是

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

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

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

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

答案 1 :(得分:0)

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