我已经使用Symfony + Angular构建了媒体管理器但需要使其超级安全,以便用户无法删除基本目录之外的文件,无法在其他任何地方上传文件,也不会能够通过尝试制作一些奇怪的文件名来崩溃系统。
到目前为止,我的功能看起来像这样:
protected function validatePath($path)
{
return !(strpos($path, '..') !== false || strpos($path, $this->baseDir) !== 0 || empty($path));
}
但我认为这还不够。 我不需要更正此路径。如果它无效,我只是抛出错误。我需要某种preg_math来检查无效的字符,并检查每个部分是否不会太长。你们有什么感想?我应该检查什么来测试路径是否有效?经理只是管理员,但你永远不知道。到目前为止用户能够:
因此路径已经在unlink
mkdir
move
等位置进行了验证。我已阅读过相似的帖子,但这里有一个区别,我不需要替换realpath
与truepath
,我也不想纠正路径。我也不想验证Windows路径(因为unix目录分隔符适用于Windows)。
在我的情况下,路径在以下情况下有效:
提前致谢。