mrmoll

mrmoll

这家伙有点懒,还没写个性签名!

  • 财富值30
  • 威望值0
  • 总积分120

个人信息

  • 赞了回复

    于是你在saveAs()的前面先行验证下就可以了:
    if ($model->validate())
    model...

  • 赞了回复

    我解释下吧,不然可能会让其他人误会
    在contorller中写上传增改数据内容都是这样写

    <?php
    public function actionName(){
       $model = new Tablename();
       if($model->load(Yii::$app->request->post()) && $model->validate()){
           .......
           //上传图片
           $model->pic= UploadedFile::getInstance($model, 'pic');
            $t = Yii::$app->user->identity->id."_".str_replace(".",'',uniqid('',true)).mt_rand(1000,9999);
            $xlsaddr = 'uploads/'. $t . '.' . $model->pic->extension;
            //将项目移动到$xlsaddr路径位置
            $model->pic->saveAs($xlsaddr);
            $model->save()
       }
       return $this->render("viewname",['model'=>$model])
    }
    ?>
    modle中的rule为下
    <?php
     public function rules()
        {
            return [
                [['pic', ], 'file','extensions' => 'jpg,png,jpeg,bmp,JPG,PNG,JPEG,BMP'],
            ];
        }
    ?>
    

    以上代码存在上传漏洞,即$model->validate(),这个验证对上传文件的验证为前端js验证,后台没有验证pic的文件上传。测试方法,为在浏览器设置禁用js(不会设置请百度),然后按照规则填写表单,在上传图片时,上传个php文件,如果上传成功,恭喜你,你的网站被别人搞下来了

  • 回复了 的说说
    祝新浪 20 周年生日快乐! 💝 🎁 🎂
  • 回复了 的回复

    我解释下吧,不然可能会让其他人误会
    在contorller中写上传增改数据内容都是这样写

    <?php
    public function actionName(){
       $model = new Tablename();
       if($model->load(Yii::$app->request->post()) && $model->validate()){
           .......
           //上传图片
           $model->pic= UploadedFile::getInstance($model, 'pic');
            $t = Yii::$app->user->identity->id."_".str_replace(".",'',uniqid('',true)).mt_rand(1000,9999);
            $xlsaddr = 'uploads/'. $t . '.' . $model->pic->extension;
            //将项目移动到$xlsaddr路径位置
            $model->pic->saveAs($xlsaddr);
            $model->save()
       }
       return $this->render("viewname",['model'=>$model])
    }
    ?>
    modle中的rule为下
    <?php
     public function rules()
        {
            return [
                [['pic', ], 'file','extensions' => 'jpg,png,jpeg,bmp,JPG,PNG,JPEG,BMP'],
            ];
        }
    ?>
    

    以上代码存在上传漏洞,即$model->validate(),这个验证对上传文件的验证为前端js验证,后台没有验证pic的文件上传。测试方法,为在浏览器设置禁用js(不会设置请百度),然后按照规则填写表单,在上传图片时,上传个php文件,如果上传成功,恭喜你,你的网站被别人搞下来了

    if($model->load(Yii::$app->request->post()) && $model->validate()){
           .......
           //上传图片
           $model->pic= UploadedFile::getInstance($model, 'pic');
            $t = Yii::$app->user->identity->id."_".str_replace(".",'',uniqid('',true)).mt_rand(1000,9999);
            $xlsaddr = 'uploads/'. $t . '.' . $model->pic->extension;
            //将项目移动到$xlsaddr路径位置
            $model->pic->saveAs($xlsaddr);
            $model->save()
       }
    

    我感觉你这个代码有问题,,你的model load的数据是post数据,而上传文件是在$_FILES里的,你的rules 里只有pic并且是file类型,,所以你浏览器禁用js上传一个木马文件,用$model->validate()它是可以通过验证的,
    我认为正确的做法应该是$model->pic->saveAs($xlsaddr); 在保存文件之前,再次$model->validate()一下就可以了

  • 放到我的代码里有module的 /module/controller/action路径没问题,如果是没有module的/controller/action路径就只能是全等的时候才高亮。

    我增加了一段 如果当前path是2个元素 就是没有module的,比较下标为0也就是第一个元素,如果是3个元素就是有module的,比较下标为1也就是第二个元素

    $route = ltrim($route,'/');
    $route = explode('/', $route);
    $path = explode('/', $this->route);
    /*下面是增加的部分start*/
    $pathCount=count($path);
    if ($pathCount == 2 && $route[0] != $path[0] && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) {
        return false;
    }
    /*上面是增加的部分end*/
    //下面要判断$pathCount==3
    if ($pathCount == 3 && $route[1] != $path[1] && $route !== $this->noDefaultRoute && $route !== $this->noDefaultAction) {
        return false;
    }
    
  • 赞了回答

    多个条件灵活拼什么拼 条件个数不定 怎么拼接?尽说这种一个条件或者条件个数特定的 一群垃圾

  • 回复了 的回答

    首先这个和环境没关系的;需要配置下允许访问ip;默认是127.0.0.1;

    'bootstrap' => ['debug'],
    'modules' => [
        'debug' => [
            'class' => 'yii\debug\Module',
            'allowedIPs' => ['你的服务器ip', '127.0.0.1', '::1']
        ]
    ]
    

    我今天刚从官网上下载yii2 advanced安装包 本地windows执行了init.bat其他什么也没改,我看了配置文件 默认没有allowedIps这个参数,访问网站debug功能正常,然后我把文件包复制到虚拟机的centos系统中 再访问底部的debug就看不到了 ,手动浏览debug地址 报403错误

  • 发布了话题
    AR如何查询两个字段相等的记录
  • 2016-09-22 已签到
    连续签到1天,获得了5个金钱
助理 等级规则
120/200
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

1

Ta的访客

2