防止上传webshell的PHP代码

时间:2021-09-05 17:00:19

很多网站都有上传图片的功能,但这也给黑客铺了一条通往webshell的路。

幸运的是我们可以通过一些简单的PHP代码防止黑客上传webshell,代码如下:

//第一步 判断上传是否有错误
if($_FILES['pic']['error']>0) {
	switch($_FILES['pic']['error']){
		case 1:
				echo "上传文件大小超出约定值<br>";
				break;
		case 2:
				echo "上传文件大小超过html表单属性定义的大小<br>";
				break;
		case 3:
				echo "文件只被部分上传<br>";
				break;
		case 4:
				echo "没有上传任何文件<br>";
				break;		
		default:
				echo "未知错误<br>";
				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('上传失败');
	}
}