很多网站都有上传图片的功能,但这也给黑客铺了一条通往webshell的路。
幸运的是我们可以通过一些简单的PHP代码防止黑客上传webshell,代码如下:
//第一步 判断上传是否有错误
if($_FILES['pic']['error']>0) {
switch($_FILES['pic']['error']){
case 1:
echo "上传文件大小超出约定值
";
break;
case 2:
echo "上传文件大小超过html表单属性定义的大小
";
break;
case 3:
echo "文件只被部分上传
";
break;
case 4:
echo "没有上传任何文件
";
break;
default:
echo "未知错误
";
break;
}
exit();
}
else {
//第二步 判断上传的类型
$arr=explode(".",basename($_FILES['pic']['name']));
$imagetype=array_pop($arr);
//白名单验证
$allowtype=array("gif","jpg","png","jpeg","bmp");
if(!in_array($imagetype,$allowtype)){
echo "上传的类型不合法";
exit;
}
//第三步 上传后的文件重命名
$tmpfile=$_FILES['pic']['tmp_name'];
$srcname="upload/".date("YmdHis").rand(100,999).".".$imagetype;
//将临时目录下的上传的文件,复制到指定目录下,则可以完成上传
if(move_uploaded_file($tmpfile,$srcname)) {
exit('上传成功');
} else{
exit('上传失败');
}
}