防止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","用户名或密码错误"); } }