PHP图片上传。如何保护包含代码的图像?

时间:2011-05-23 19:10:30

标签: php file-upload

据我了解, - 图像(jpeg,gif等)可能包含有效的php / python / perl等代码。所以 - 任何人都可以创建有效的jpeg文件,同时可以由PHP解释器执行。 (这里是描述:link

所以 - 我想知道 - 有没有办法从图像中删除恶意代码?用GD或imagemagic工作重新编码图像?

谢谢!

2 个答案:

答案 0 :(得分:4)

实际图片不包含代码。但没有什么可以阻止某人试图上传“图像”文件,然后尝试让它执行。

您的解释器(Perl,PHP,无论如何)应该设置为只执行某些文件类型(即.php或.php5)。 Perl或PHP没有理由解析图像文件。

只需使用以下常识来保护自己:

1)验证文件的mime类型
2)实施仅允许上传特定分机的文件的政策 3)不要接受面值的文件名。生成您自己的内部文件名并使用数据库表来保持映射 4)如果你真的是偏执狂,找一些代码来检查字节签名是否对给定的文件类型上传有效。

答案 1 :(得分:0)

您应该将您的网络服务器配置为不允许PHP解释您的图像文件扩展名。正如问题中链接的页面所示,图像可以包含PHP代码。请始终针对白名单检查文件扩展名:

<?php  
$whitelist = '/\.(?:jpe?g|png|gif)$/i'; 
if (!preg_match($whitelist, $_FILES['userfile']['name'])) {  
    echo "Bad filename extension.";  
    exit;  
}
$uploaddir = 'uploads/';  
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);  
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {  
    echo "File is valid, and was successfully uploaded.";  
} else {  
    echo "File uploading failed.";  
}  
?>