0

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

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

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

4

2 回答 2

3

另一种解决方法是

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

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

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

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

于 2012-10-29T23:14:38.127 回答
0

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

于 2012-10-29T22:07:05.137 回答