PHP验证文件管理器的相对路径

时间:2016-10-15 15:00:42

标签: php angularjs validation symfony

我已经使用Symfony + Angular构建了媒体管理器但需要使其超级安全,以便用户无法删除基本目录之外的文件,无法在其他任何地方上传文件,也不会能够通过尝试制作一些奇怪的文件名来崩溃系统。

到目前为止,我的功能看起来像这样:

protected function validatePath($path)
{
    return !(strpos($path, '..') !== false || strpos($path, $this->baseDir) !== 0 || empty($path));
}

但我认为这还不够。 我不需要更正此路径。如果它无效,我只是抛出错误。我需要某种preg_math来检查无效的字符,并检查每个部分是否不会太长。你们有什么感想?我应该检查什么来测试路径是否有效?经理只是管理员,但你永远不知道。到目前为止用户能够:

  1. 创建目录
  2. 上传文件
  3. 删除文件
  4. 编辑文本文件
  5. 重命名文件
  6. 因此路径已经在unlink mkdir move等位置进行了验证。我已阅读过相似的帖子,但这里有一个区别,我不需要替换realpathtruepath,我也不想纠正路径。我也不想验证Windows路径(因为unix目录分隔符适用于Windows)。

    在我的情况下,路径在以下情况下有效:

    • 它位于媒体基础目录
    • 只前进(不允许)
    • 不是空的
    • 可能存在也可能不存在(因此不能选择realpath)
    • 目录分隔符是unix /
    • 是相对的
    • 时间不长(我不知道如何正确检查这个)
    • 它不包含无效字符(可以使用此处的帮助)

    提前致谢。

0 个答案:

没有答案