PHP上传文件过滤
我试图写一个上传脚本,只接受PNG图像上传。上传脚本工作正常,但当我添加png图像检测时,它会中断 以下是我如何设置它的:PHP上传文件过滤,php,html,upload,Php,Html,Upload,我试图写一个上传脚本,只接受PNG图像上传。上传脚本工作正常,但当我添加png图像检测时,它会中断 以下是我如何设置它的: if ($_FILES) { if ($_FILES["file"]["type"] == "image/png") { $target_path = "uploads/"; $target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if ($_FILES) {
if ($_FILES["file"]["type"] == "image/png") {
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
} else { echo "Not A PNG…";
}
}
上载PNG图像时,出现“not a PNG”错误-有什么想法吗?看起来您在IF语句中引用了错误的文件:
if ($_FILES["file"]["type"] == "image/png") {
应该是
if ($_FILES["uploadedfile"]["type"] == "image/png") {
(“file”需要是“uploadedfile”)我看到一些服务器没有在$\u FILES变量中添加mime类型的image/png。。。有一种稍微重一点的方法:
if (@imagecreatefrompng($_FILES["file"]["tmp_name"])
当您使用GD库打开图像画布时,这里的性能会稍微降低
如果性能或缺少GD库是一个问题,只需检查扩展:
if (strtolower(end(explode('.',$_FILES["file"]["name"])) == 'png')
注意 如果要使用该函数,建议确保安装了GD:
If(函数_存在('imagecreatefrompng'))
重要 如果你对内存使用持谨慎态度(你应该这样做)
$\u文件[…]['type']
用于任何用途。它只是一个用户提供的任意字符串,可能与实际文件有关,也可能与实际文件无关错误报告(E\u ALL);ini设置(“显示错误”,真)代码>,这将帮助您找到特定的打字错误
if (!empty($_FILES['uploadedfile'])) {
if ($_FILES['uploadedfile']['error'] !== UPLOAD_ERR_OK) {
die('Error during upload');
}
if (exif_imagetype($_FILES['uploadedfile']['tmp_name']) !== IMAGETYPE_PNG) {
die('Wrong file type');
}
...
}
你确定它是PNG图像,而不是扩展名为.PNG的其他格式吗?我意识到问题是由于名称输入错误导致该格式无法正常运行,但是值得解决,因为其他人提到,这里提供的类型字符串不可信。这是绝对正确的,而且由于您实际上没有检查有关文件的任何其他信息,因此可以轻松绕过此检查,以允许将任意代码(或任何其他内容)上载到您的系统。我建议采取其他措施来保护此上载脚本,否则在不久的将来可能会出现安全问题。谢谢,我完全没有注意到这一点-我会在计时器启动后检查它。此脚本不保证图像实际上是png图像。Mimetype很容易伪造。不过,这就是问题所在?哈哈-顺便说一句,如果你想使用PHP-GD进行正确的PNG验证,请参阅我下面的帖子,nice eyes@Ben DYeah,对不起,我刚刚混淆了变量名。
if (!empty($_FILES['uploadedfile'])) {
if ($_FILES['uploadedfile']['error'] !== UPLOAD_ERR_OK) {
die('Error during upload');
}
if (exif_imagetype($_FILES['uploadedfile']['tmp_name']) !== IMAGETYPE_PNG) {
die('Wrong file type');
}
...
}