使用一个简单的 firefox 插件,黑客可以更改他们想要上传的任何文件的 mime 类型,绕过您的文件类型检查器。
然后,黑客可以使用 GIMP 之类的程序将 php 脚本嵌入图像、音频或任何其他文件的二进制数据中。
我该如何检查并防止它?
您可以使用mime_content_type () 来获取文件的实际 mime 类型,而不是客户端浏览器传输的值。
然后,您可以使用允许在 PHP 中执行病毒扫描的库,例如php-ClamAV 。
您可以丢弃除您期望的文件扩展名之外的任何文件扩展名(例如,如果您期望图像,则为 .png、.jpg 等)。在图像的特定情况下,您还可以通过修改图像来中和图像(例如稍微调整它们的大小、修改压缩率、修改数据并中和任何可执行文件)。
最后当然是不给文件执行权。但与评论中所说的相反,这并不能真正保护你。例如,如果黑客通过注入找到了运行 php 文件的方法,他将能够对文件进行 chmod 并正确执行(甚至运行它)。
一个好的做法是始终以不可预测的方式重命名文件。如果上传后不打算被客户端访问,请将文件发送到禁用目录浏览的文件夹中。