很多网站都有上传图片的功能,但这也给黑客铺了一条通往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('上传失败'); } }