Ale*_*art 5 php security file-upload
我想知道这种方法是否存在任何安全漏洞.我正在编写一段代码,允许用户上传文件,另一组代码下载这些文件.这些文件可以是任何东西.
在某种程度上,任何人都可以利用上述场景吗?
嗯,理论上没有。不应该有办法利用该系统。然而,有几件事我想向你指出,你可能没有想到。
首先,由于文件是通过 PHP 文件下载的(假设readfile()
具有适当的标头),因此您应该将文件放置在用户无法访问的位置。在apache服务器上,通常最简单的方法是将.htaccess文件放入上传目录中,其中包含“deny from all”以防止外部访问。如果用户一开始就无法从外部访问文件,那么就不必担心文件扩展名会造成麻烦(不过,出于存储目的重命名仍然是一个好主意)
其次,通过哈希命名文件可能不是一个好主意,因为最终可能会发生冲突。如果两个文件碰巧具有相同的哈希值怎么办?更不用说,计算哈希值有点慢,特别是对于较大的文件(如果根据文件内容而不是名称计算)。由于您将条目存储到数据库中,我假设您在那里有某种主键(例如 auto_increment 字段)。我建议简单地使用该 ID 号作为存储的文件名,以避免冲突(如果您不知道,您可以通过 获取上次插入生成的 ID mysql_last_insert_id()
)
当然,包含病毒的文件可能总是存在问题,这些病毒可能会感染下载文件的机器,但这确实超出了这个问题的范围,并且不会以任何方式影响服务器本身。