如何验证使用 php 上传的文件不包含可执行二进制文件?



使用一个简单的firefox插件,黑客可以绕过文件类型检查器更改他们想要上传的任何文件的mime类型。

然后,黑客可以使用类似GIMP的程序在图像、音频或任何其他文件的二进制数据中嵌入php脚本。

我如何检查并防止这种情况发生?

您可以使用mime_cont_type()来获取文件的实际mime类型,而不是客户端浏览器传输的值。

然后,您可以使用php-ClammAV之类的库,该库允许在php中执行病毒扫描。

您可以放弃任何文件扩展名,除了您期望的扩展名(例如,如果您期望图像,则可以放弃.png、.jpg等)。在图像的特定情况下,您也可以通过修改图像来中和图像(例如,稍微调整图像大小,修改压缩率,修改数据并中和任何可执行文件)。

当然,最后要考虑的是不赋予文件执行权。但与评论中所说的相反,这并不能真正保护你。如果黑客找到了一种通过注入来运行php文件的方法,例如,他将能够对文件进行chmod并获得正确的执行(甚至运行它)。

一个好的做法是总是以不可预测的方式重命名文件。如果上传后客户端不想访问它,请将文件发送到禁用目录浏览的文件夹中。