我正在为我的网站实现基于用户的图像上传工具.系统应允许任何用户仅上传JPEG和PNG文件.当然,我担心安全问题,所以我想知道许多比我更聪明的人对以下允许上传的检查感觉如何:
1)首先列出PHP中允许的文件扩展名,仅允许PNG,png,jpg,JPG和JPEG.通过以下功能检索用户文件的扩展名:
return end(explode(".", $filename));
Run Code Online (Sandbox Code Playgroud)
这应该有助于禁止用户上传恶意内容,例如.png.php.如果通过,请转到步骤2.
2)在TMP文件上运行php函数getimageize().通过类似的东西:
getimagesize($_FILES['userfile']['tmp_name']);
Run Code Online (Sandbox Code Playgroud)
如果这不返回false,请继续.
3)确保.htaccess文件放在uploads目录中,以便该目录中的任何文件都无法解析PHP文件:
php_admin_value engine Off
Run Code Online (Sandbox Code Playgroud)
4)将用户的文件重命名为预先确定的内容.IE
$filename = 'some_pre_determined_unique_value' . $the_file_extension;
Run Code Online (Sandbox Code Playgroud)
这也有助于防止SQL注入,因为文件名将是所使用的任何查询中唯一的用户确定的变量.
如果我执行上述操作,我仍然容易受到攻击吗?在接受文件之前,我希望有1)只允许jpgs和png,2)验证PHP说它是有效图像,3)禁用图像所在的目录执行.php文件和4)将用户文件重命名为某些内容独特.
谢谢,