[PHP] 檔案上傳過程中基於白名單、黑名單、基於MIME的認證以及目錄認證
阿新 • • 發佈:2019-01-06
1.基於黑名單
<?php $BlackList = array('asp','php','jsp','php5','asa','aspx');//黑名單 if (isset($_POST["submit"])){ $name = $_FILES['file']['name']; //接收檔名 echo $name; $extension = substr(strrchr($name,"."),1);//得到副檔名 $boo = false; foreach ($BlackList as $key=>$value){ if ($value==$extension){//迭代判斷是否有命中 $boo=true; break;//命中之後直接退出迴圈 } } if(!$boo){//如果沒有命中,則開始檔案上傳操作 $size=$_FILES['file']['size'];//接收檔案大小 $tmp=$_FILES['file']['tmp_name'];//臨時路徑 move_uploaded_file($tmp,$name);//移動臨時檔案到當前檔案目錄 echo "檔案上傳成功!<br/> path:".$name; }else { echo "檔案不合法!!"; } } ?>
2.基於白名單
<?php $WhiteList = array('rar','jpg','png','bmp','gif','jpg','doc'); if (isset($_POST["submit"])){ $name = $_FILES['file']['name']; //接收檔名 $extension = substr(strrchr($name,"."),1);//得到副檔名 $boo = false; foreach ($WhiteList as $key=>$value){ if ($value==$extension){//迭代判斷是否有命中 $boo=true; } } if($boo){//如果有命中,則開始檔案上傳操作 $size=$_FILES['file']['size'];//接收檔案大小 $tmp=$_FILES['file']['tmp_name'];//臨時路徑 move_uploaded_file($tmp,$name);//移動臨時檔案到當前檔案目錄 echo "檔案上傳成功!<br/> path:".$name; }else { echo "檔案不合法!!"; } } ?>
3.基於MIME
<? if ($_FILE['file']['type']=="image/jpeg"){//判斷是否是JPG格式 $imageTempName=$_FILES['file']['tmp_name']; $imageName=$_FILES['file']['name']; $last = substr($imageName,strrpos($imageName,".")); if(!is_dir("uploadFile")) mkdir("uploadFile"); } $imageName=md5($imageName).$last; move_uploaded_file($imageTempName,"./uploadFile".$imageName);//指定檔案上傳到uploadFile目錄 echo ("檔案上傳成功!! path=/uploadFile/$imageName"); } else{ echo ("檔案型別錯誤,請重新上傳..."); exit(); } ?>
4.目錄認證
前端:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file"/><br/>
<input type="file" name="Extension" value="up"/>
<input type="submit" value="提交" name="submit" />
</form>
後端:
<?php
if($_FILES['file']['type']=="image/jpeg"){ //判斷是否是JPG格式
$imageTempName=$_FILES['file']['tmp_name']; //接受檔案路徑
$imageName=$_FILES['file']['name']; //接收檔名稱
$last=substr($imageName,strrpos($imageName,"."));//取得副檔名
if($last!=".jpg"){
exit("圖片型別錯誤!");
}
$Extension=$_POST["Extension"];
if(!is_dir($Extension)){
mkdir($Extension);
}
$imageName=md5($imageName).$last;
move_uploaded_file($imageTempName,"./Extension/".$imageName);
echo("檔案上傳成功!! path= /$Extension/$imageName");
}
else{
echo("檔案型別錯誤,請重新上傳。。。");
exit();
}
?>