Javascript 如何防止用户上传扩展名更改的恶意文件

Javascript 如何防止用户上传扩展名更改的恶意文件,javascript,php,Javascript,Php,我有一个网站,用户可以上传图像。我限制了PNG、JPG、JPEG的文件扩展名 问题: 我在本地计算机文件夹中存储了一个zip文件。 Zip文件名=“lara.Zip” 后来我把这个zip文件名改为“Lara.jpg” 然后我通过这个上传脚本将这个带有jpg扩展名的zip上传到我的网站上。 脚本成功提交了我的,并将此文件上载到我的网站 解决方案: 问题:如何防止用户上传不需要的文件?我怎样才能找到他们上传的文件就是一张图片 谢谢 现在我已经编辑了这个问题,但是代码不会检查这个错误,如果它是否是一个

我有一个网站,用户可以上传图像。我限制了PNG、JPG、JPEG的文件扩展名

问题:

我在本地计算机文件夹中存储了一个zip文件。 Zip文件名=“lara.Zip”

后来我把这个zip文件名改为“Lara.jpg”

然后我通过这个上传脚本将这个带有jpg扩展名的zip上传到我的网站上。 脚本成功提交了我的,并将此文件上载到我的网站

解决方案:

问题:如何防止用户上传不需要的文件?我怎样才能找到他们上传的文件就是一张图片

谢谢

现在我已经编辑了这个问题,但是代码不会检查这个错误,如果它是否是一个确认的扩展名

if(isset($\u文件[“图像上传”][“名称”])){
$name=$\u文件[“图像上传”][“名称”];
$size=$\u文件[“图像上传”][“大小”];
$ext=end(分解(“.”,$name));
$allowed_ext=数组(“png”、“jpg”、“jpeg”、“png”、“jpg”、“jpeg”);
$checkexactlyimage=getimagesize($name);
$allowedTypes=数组(IMAGETYPE\u PNG、IMAGETYPE\u JPEG、IMAGETYPE\u GIF);
$detectedType=exif_imagetype($_文件['image_upload']['tmp_name']);
$detectedTypeerror=!在数组中($detectedType,$allowedTypes);
如果($detectedTypeerror!==false){
echo“仅允许JPG、PNG和JEPG文件”;
}else if($check!==false){
echo“仅允许JPG、PNG和JEPG文件”;
}else if(在数组中($ext,$allowed\u ext)){
如果($尺寸<(5000000)){
$new_image='';
$new_name=md5(rand())....$ext;
$path='../folder/'.$new\u name;
列表($width,$height)=getimagesize($_文件[“图像上传”][“tmp_名称]);
如果($ext=='png'){
$new_image=imagecreatefrompng($_文件[“图像上传”][“tmp_名称]);
}
如果($ext=='jpg'| |$ext=='jpg'| |$ext=='JPEG'| |$ext=='JPEG'){
$new_image=imagecreatefromjpeg($_文件[“图像上传”][“tmp_名称]);
}
$new_width=730;
$new_height=($height/$width)*400;
$tmp_image=imageCreateTureColor($new_width,$new_height);
imagecopyresampled($tmp_图像,$new_图像,0,0,0,$new_宽度,$new_高度,$width,$height);
imagejpeg($tmp_image,$path,100);
imagedestroy($new_image);
图像销毁($tmp_图像);
//第三,获得你的形象
$image3=$path;
$picture3=base64_编码(文件获取内容($image3));
$adimageno='data:image/gif;base64'。$picture3'';
回声';
$ifexistalready=“查询”;
$ifexistalreadyqry=mysql\u查询($ifexistalready);
$existornot=mysql\u fetch\u assoc($ifexistalreadyqry);
$getidofstore=$existornot['ID'];
$getcvrimage=$existornot['Simage'];
$updatetable=“查询”;
$updatetableqry=mysql\U查询($updatetable);
如果($updatetableqry){
取消链接('../store image/'.$getcvrimage);
}否则{
echo“上传图像时出错”;
}
}否则{
echo“图像文件大小必须小于5 MB”;
}
}否则{
echo“仅允许JPG、PNG和JEPG文件”;
}
}否则{
echo“请选择一个图像文件”;

}
为您重构了混乱的块

$checkexactlyimage = getimagesize($_FILES['image_upload']['tmp_name']);   
$allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
$detectedType = exif_imagetype($_FILES['image_upload']['tmp_name']);
$detectedTypeerror = !in_array($detectedType, $allowedTypes);

if($detectedTypeerror !== false) {
  echo "Only JPG,PNG and JEPG files are allowed";   
}else if( $checkexactlyimage === false)  {
  echo "Only JPG,PNG and JEPG files are allowed";   
}

@Jecoms这不是上面问题的重复。仔细看我的代码,你会发现我已经为上面的扩展类型检查编写了代码。检查。它建议使用来实际验证文件是否为图像。@alex你的问题不是重复的,但它确实回答了你的问题。有人能帮我将代码添加到吗上面是我的现有脚本。Moch感谢所有人
$valid=getimagesize($\u FILES['image\u upload']['tmp\u name'])?true:false;