文件上传解析漏洞

    

文件上传解析漏洞

# js验证文件后缀
extArray = new Array('.gif','.jpg','.png'); // 白名单
function LimitAttach(form,file){
    allowSubmit = false;
    if(!file)
        return;
    while(file.indexOf('\\')!=-1)
    file = file.slice(file.indexOf('\\')+1);
    ext = file.slice(file.indexOf('.')).toLowerCase();
    for(var i = 0 ; i < extArray.length ; i++){
        if(extArray[i] == ext){
            allowSubmit = true ; 
            break ;
        }
    }
    if(allowSubmit)
        form.submit();
    else
        alert("bad Extension");
}
# php接收文件(没有任何校验)
<?php
  if(isset($_POST['submit'])){
        $name = $_FILES['file']['name']; //文件名
        $naem = md5(date('Y-m-d h:m:s')).strrchr($name,'.');// 文件重命名保留扩展
        $size = $_FILES['file']['size']; //文件字节大小
        $tmp = $_FILES['file']['tmp_name']; //临时路径
        move_uploaded_file($tmp,$name); //移动文件到tmp目录下
        echo '文件上传成功'.$name;
    }
?>
# 校验Content-type字段MIME类型
<?php
    if($_FILES['file']['type'] != 'image/jpeg'){  // 判断文件的MIME格式
        echo "Sorry!文件上传格式错误 Error";
        exit;

    }
?>
# 扩展名检测
<?php
    if(isset($_POST['submit'])){
        $name = $_FILES['file']['name']; // 获取文件名
        $ext = substr(strrchr($name,"."),1); //获取扩展名[strrchr()找到符号"."并返回从该位置到结尾的所有字符(字符串),substr(str,1)获得扩展名字符串]
        while($ext==xxx){}
        // 调用黑白名单进行循环对比,一旦命中则执行相关的放过/拦截操作!
    }
?>
# 目录验证
<?php
    if(isset($_POST['submit'])){
        $name = $_FILES['file']['name']; //文件名
        $naem = date('Y-m-d h:m:s').strrchr($name,'.');// 文件重命名保留扩展
        $tmp = "./root/"; //存储路径,可以是服务器指定或者用户原则或则机制选择
        move_uploaded_file($tmp,$name); //移动文件到tmp目录下
    }
?>

服务器校验文件实例代码

<?php
    if(isset($_POST['submit'])){
        $name = $_FILES['file']['name'] ;
        $type = $_FILES['file']['type'] ;
        $tmp = "./image/";
    }
    
    file_array = new array('jpeg','png','jpg','gif');// 白名单
    for ($i=0; $i < file_array.length; $i++) {
        if (substr(strrchr($name, "."),1) == file_array[i]) {
            if( $type == "image/gif" | $type == "image/jpeg" ){

                move_uploaded_file($tmp, $name);
                echo "图片上传成功……".$name;
                exit;
            }
        }
    }
?>

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

仅有一条评论

  1. 我有一个想法,怎么插入代码到图片里,有大用

添加新评论

  关于博主

QQ:1960727927
E-Mail:ceet@vip.qq.com
个人主页:https://aiylqy.com
个性签名:毁掉一个人最好的方式就是放纵他的缺点。

  近期评论

生活其实很简单,过了今天就是明天。

低头哭过别忘了抬头继续走。

不要被任何人打乱自的脚步,因为没有谁会像你一样清楚和在乎自己梦想。

没有人可以打倒我,除非我自己先趴下!

你要记住你不是为别人而活,你是为自己而活。