据我了解, - 图像(jpeg,gif等)可能包含有效的php / python / perl等代码。所以 - 任何人都可以创建有效的jpeg文件,同时可以由PHP解释器执行。 (这里是描述:link)
所以 - 我想知道 - 有没有办法从图像中删除恶意代码?用GD或imagemagic工作重新编码图像?
谢谢!
答案 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.";
}
?>