防止SQL注入

我们在检验用户名是否合法的sql语句是这样的

select * from my_user where user='$id' and pwd=$pwd; 

如果我们输入的是‘or 1 #,此时的sql语句变成了

select * from my_user where user='' or 1 # and pwd=$pwd;

这样一来,#后面为注释就不解析了?用户名=' ' or 1 永远为真

所以 我们引入来sql注入方法,考虑到前台home也使用,所以在基础控制器中添加方法

        /**
         * 对用户安全数据进行过滤
         */

         protected function filterUser($str){
             //通过使用addslashes函数对单引号使用反斜杠转义
            return addslashes(strip_tags(trim($str)));
         }

 

控制在接收的时候

  //效验登录
    public function checkAction(){
        
        //接收表单数据并去除标签和空格,并且放置sql注入
        $admin= $this->filterUser($_SESSION['admin']);
        $pwd=$_POST['pwd'];
        $code=trim($_POST['passcode']);

        //检验验证码是否非法
        $capcha=Factory::M('Capcha');
        //验证非法
        if(!$capcha->checkCapcha($code)){
            $this->jump("index.php?p=back&c=Admin&a=show","验证码错误");
        }
        //去数据库验证数据有效性
        $model=Factory::M('AdminModel');
        if($row = $model->check($admin,$pwd)){     //如果合法我们应该把用户信息存放到session中
            @session_start();   //开启session机制
            $_SESSION['adminInfo']=$row;
            //更新登录信息
            $model->updata_login($row['id']);
           $this->jump("index.php?p=back&c=Index&a=index");
        }else{
            $this->jump("index.php?p=back&c=Admin&a=show","用户名或密码错误");
        }
    }

 

posted @ 2021-02-08 11:36  WhiteSpace  阅读(97)  评论(0编辑  收藏  举报