您的位置:首页 > 编程语言 > PHP开发

[PHP] 文件上传过程中基于白名单、黑名单、基于MIME的认证以及目录认证

2015-07-25 22:21 711 查看
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();
}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: