我想允许成员使用zip文件上传内容.上传后,我想使用PHP的ZipArchive类将zip文件内容解压缩到一个目录,然后将文件移动到我们的系统中.
我担心潜在的安全风险,我在php.net上找不到任何文档.想到的第一个(好的,唯一的)风险是有人创建一个zip文件,其相对路径如"../../etc/passwd"(如果他们假设我在/ tmp/somedir中解压缩文件).
我实际上很难在zip文件中创建相对路径,所以我无法测试这样的事情是否可行.我也找不到使用ZipArchive提取zip文件内容的任何方法,并让它忽略目录(解压缩所有文件,但不要在zip中创建目录结构).
任何人都可以告诉我这样的漏洞是否可行,和/或如何使用ZipArchive忽略zip文件中的目录结构?
最后,我将采用 Pekka 的解决方案,即使用命令行解压缩实用程序。它提供了忽略 zip 文件中的目录的开关。其他人指出的担忧在这里不是问题。文件解压缩后,我们将使用与常规上传相同的流程将它们添加到系统中,这意味着每个文件都会使用我们已有的安全措施进行仔细检查。