【发布时间】:2010-09-04 21:55:03
【问题描述】:
我正在为我的网站实施基于用户的图片上传工具。系统应该只允许任何用户上传 JPEG 和 PNG 文件。当然,我担心安全问题,所以我想知道许多比我聪明的人对以下允许上传的检查有何看法:
1) 首先将 PHP 中允许的文件扩展名列入白名单,以仅允许 PNG、png、jpg、JPG 和 JPEG。通过如下函数检索用户文件的扩展名:
return end(explode(".", $filename));
这应该有助于禁止用户上传诸如 .png.php 之类的恶意内容。如果通过,请转到第 2 步。
2) 对 TMP 文件运行 php 函数 getimageize()。通过类似的方式:
getimagesize($_FILES['userfile']['tmp_name']);
如果这没有返回 false,请继续。
3) 确保将 .htaccess 文件放在上传目录中,这样该目录中的任何文件都无法解析 PHP 文件:
php_admin_value engine Off
4) 将用户的文件重命名为预先确定的名称。即。
$filename = 'some_pre_determined_unique_value' . $the_file_extension;
这也有助于防止 SQL 注入,因为文件名将是任何使用的查询中唯一由用户确定的变量。
如果我执行上述操作,我仍然容易受到攻击吗?在接受文件之前,我希望 1) 只允许 jpgs 和 pngs,2) 验证 PHP 说它是一个有效的图像,3) 禁用图像所在的目录执行 .php 文件和 4) 将用户文件重命名为独一无二。
谢谢,
【问题讨论】:
-
你能在图像文件上使用 strip_tags 来删除 PHP 标签吗?
标签: php security image file-upload upload