PHP开发笔记-白名单安全上传

01
上传的安全问题

PHP开发笔记-上传
文件上传的安全问题可以说是PHP开发的重中之重,如果上传把关不严,将有可能导致整个服务器沦陷。下面将会使用2种白名单方法,对上传文件进行白名单过滤,并且采取强制修改文件名,强制给文件加上后缀。

02
通过文件名获取后缀判断方法

PHP开发笔记-上传
首先定义一个数组存放白名单的文件后缀:
$alloweExts=array("jpeg","gif","jpg","png");
使用explode()函数分割文件名
$temp=explode(".", $_FILES["$file"]['name']);
获取数组中最后一个元素即后缀名
$extension = end($temp);
使用in_array()函数匹配后缀是否是白名单类型,返回布尔值
in_array($extension, $alloweExts)
该方法并不安全,如果存在解析漏洞很有可能绕过该方法
03
$_FILE方法判断文件类型

PHP开发笔记-上传
if((($_FILES["$file"]['type']=="image/gif")
||($_FILES["$file"]['type']=="image/jpeg")
||($_FILES["$file"]['type']=="image/jpg")
||($_FILES["$file"]['type']=="image/png")
||($_FILES["$file"]['type']=="image/pjpeg")
||($_FILES["$file"]['type']=="image/x-png"))
&&($_FILES["$file"]['size']<20480000)

03
两种方法结合

PHP开发笔记-上传

class pic{
	public function UploadPic($file){
$alloweExts=array("jpeg","gif","jpg","png");
$temp=explode(".", $_FILES["$file"]['name']);
$extension = end($temp);
if((($_FILES["$file"]['type']=="image/gif")
||($_FILES["$file"]['type']=="image/jpeg")
||($_FILES["$file"]['type']=="image/jpg")
||($_FILES["$file"]['type']=="image/png")
||($_FILES["$file"]['type']=="image/pjpeg")
||($_FILES["$file"]['type']=="image/x-png"))
&&($_FILES["$file"]['size']<20480000)
&& in_array($extension, $alloweExts))
{
if($_FILES["$file"]['error']>0)
{
return "{error}";
}else{
                  $FileUrl="/upload/".md5(time())."."."png";
move_uploaded_file($_FILES["$file"]['tmp_name'],
                 $_SERVER['DOCUMENT_ROOT'].$FileUrl);
 
return $FileUrl;
}			
}else{
return "{文件非法}";
}
}
}

04
调用方法

PHP开发笔记-上传
include("UploadPic.php");//包含上传类
UploadPictrue = new pic();//实例化pic类
file_url=UploadPictrue-> UploadPic("fileUpload");
//传入input 上传文件表单的name
 
?>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<!-- enctype="multipart/form-data" 以二进制形式上传-->
 
    <input type="file" name="fileUpload" />
 
    <input type="submit" value="上传" />
 
    </form>
 
</body>
</html>

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » PHP开发笔记-白名单安全上传

赞 (0) 打赏

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 小黄鸡这样是文件伪装上传,应该可以上传成功吧?回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏