文件上传解析漏洞

    

文件上传解析漏洞

# 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
个性签名:毁掉一个人最好的方式就是放纵他的缺点。

  近期评论

无论有多困难,都坚强地抬头挺胸,告诉所有人,你并非他们想象的那样不堪一击。

每个人心里都有一段伤痕,时间才是最好的疗剂。

人总是珍惜未得到的,而遗忘了所拥有的。

退一步,并不象征我认输;放手,并不表示我放弃;微笑,并不意味我快乐!

人海中再回首,朋友真诚依旧,生命里重逢,心境平和温柔,往事如风,岁月如歌,漫漫人生路,苍桑几许,幸福几何!