我需要接受来自用户的图像文件上传 .
我如何检查并100%确定我没有收到恶意文件?
检查哑剧类型?重新绘制图像?防病毒?
重绘图像,用GD的 imagecreatefromXXX() 读取并用 imageXXX() 保存
imagecreatefromXXX()
imageXXX()
这样,您还可以将其缩放到更方便的尺寸,并控制带宽消耗 .
为了节省计算能力,请拒绝上传到大于某个限制的文件 .
5megs或10megs应该是好的,因为限制 .
保持GD更新,并警惕(7年前,显然)it used to sport buffer overflows处理 PNG images
或者,您也可以使用ImageMagick的转换等命令在后台预处理上传的图像 . 最后注意警告:在Windo(w)上,转换也是一个用于格式化硬盘的命令,因此如果部署硬盘,请花一些精力来消除歧义 .
如果您担心恶意文件使用防病毒检查程序,或者更好,其中两个可能会因为某个新病毒而落后 .
MIME类型可以欺骗,也可以使用 file .
file
您可以使用代码打开它,检查所有块是否都是正确的大小,但利用漏洞利用用于打开图像的代码中的缺陷 . 如果你的代码没有加强并且知道它可以被利用的所有方式,你可能会打开在主机/服务器上利用的大门 - 它几乎是一个鸡和蛋的情况,所以我倾向于更多地信任几个防病毒工具 .
我不会去100%图像类型验证,我使用简单的脚本来检查图像类型验证
$imgExtension = array('jpg','jpe','jpeg','gif','png'); $image_name = pathinfo($_FILES['image']['name']); $extension = strtolower($image_name['extension']); if(in_array($extension,$ImgExtension)){ //process file upload - move_uploaded_file() }
?>
您还可以检查mime类型以进行更准确的验证 .
我不确定它是否完全安全,但你可以使用
if( getimagesize($filename) ) //probably an image
4 回答
重绘图像,用GD的
imagecreatefromXXX()
读取并用imageXXX()
保存这样,您还可以将其缩放到更方便的尺寸,并控制带宽消耗 .
为了节省计算能力,请拒绝上传到大于某个限制的文件 .
5megs或10megs应该是好的,因为限制 .
保持GD更新,并警惕(7年前,显然)it used to sport buffer overflows处理 PNG images
如果您担心恶意文件使用防病毒检查程序,或者更好,其中两个可能会因为某个新病毒而落后 .
MIME类型可以欺骗,也可以使用
file
.您可以使用代码打开它,检查所有块是否都是正确的大小,但利用漏洞利用用于打开图像的代码中的缺陷 . 如果你的代码没有加强并且知道它可以被利用的所有方式,你可能会打开在主机/服务器上利用的大门 - 它几乎是一个鸡和蛋的情况,所以我倾向于更多地信任几个防病毒工具 .
我不会去100%图像类型验证,我使用简单的脚本来检查图像类型验证
?>
您还可以检查mime类型以进行更准确的验证 .
我不确定它是否完全安全,但你可以使用