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