我正在编写一个通过网络发送所请求文件内容的服务。但是,我只会回复对来自固定parent
目录的文件的请求。
首先想到的潜在安全问题是,恶意用户可能会请求嵌入了..
的路径。另一个潜在的问题是符号链接,虽然这些不应该是一个问题,因为我控制本地文件系统,parent
下不会有任何simlink。
因此,我的问题是,检查路径组件中是否存在..
是否足够。或者是否有其他一些我忘记的安全漏洞?
答案 0 :(得分:3)
另一种方法是
这样你就可以绝对肯定。这需要一个工作的规范化器。使用编程环境提供的编辑环境,例如path.normalize(),readlink -f等。
如果没有,那么从安全角度来说,自己编写它是没有问题的。你规范了你所知道的('..'一个人 - 或者你忽略它,使其成为非法),并且上面的检查将拒绝剩下的东西。这应该是显而易见的,但是您当然只能稍后使用规范化路径来访问文件,而不是用户提供的路径。
您应该确定的一点是,规范化的父目录以斜杠(或反斜杠,如果在Windows上)结束,否则用户可以访问与parentDir相同级别的文件夹,该文件以与parentDir相同的字符开头
答案 1 :(得分:0)
不要忘记双斜杠example//path
。有些系统会将这些视为/path
。