数据库

 首页 > 数据库 > MySql > mysql中的0引发的安全风险

mysql中的0引发的安全风险

分享到:
【字体:
导读:
         摘要:menzhi007mysql的比较运算,黑哥解释的很清楚,感谢下http://www.2cto.com/201003/45294.html当mysql中执行where条件时0可以作为通配符,来查询索引出数据。mysql>selectusernamefromuserswhereusername0limit1;+--...

mysql中的0引发的安全风险

menzhi007

mysql的比较运算,黑哥解释的很清楚,感谢下

http://www.2cto.com/database/201003/45294.html

当mysql中执行where条件时 0可以作为通配符,来查询索引出数据。

mysql> select username from users where username=0 limit 1;
+----------+
| username |
+----------+
| admin    |
+----------+
1 row in set

早上又在同学机子上做了oracle和mssql 中的测试

比较不充分,比如应该拿字符串和数字比等等,大家自行测试下吧

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod


MSSQL中



最终我们只能在mysql中测试成功

实例程序中遇到的问题,当直接访问控制器的的方法,尤其用户名密码未提交值,将默认提交“0”,最终将直接导致直接绕过验证。

users.php Controllers中的代码

/*修补后首页登录框*/
function ajax_login_back() {
   if($this->input->post(username)!="" && $this->input->post(password)!="") {//增加这句判断是否为空
    echo $this->users_model->verify_user($this->input->post(username),$this->input->post(password));
   } else {
    redirect(articles,refresh);
   }
}
//漏洞代码
function ajax_login() {
  echo $this->users_model->verify_user($this->input->post(username),$this->input->post(password));//漏洞代码
}

users_model.php Models中的代码

public function verify_user($username, $password) {
   $query = $this->db->where(username, $username);//
   //$query = $this->db->where(password is not null);
   $query = $this->db->where(password,$password);
   $query = $this->db->get(users, 1);
  
   if ($query->num_rows() == 1) {
    $row = $query->row_array();
    $data = array(
       uid => $row[uid],
       username => $row[username],
       level => $row[level],
       logged_in => TRUE
      );

    $this->session->set_userdata($data);
    return 1;
   } else {
    return NULL;
   }
}


前台 index.php Views中的代码

我们再来看看 mysql_driver.php 是如何定义的

function _execute($sql)
{ //echo $sql;输出sql 语句测试
   $sql = $this->_prep_query($sql);
   return @mysql_query($sql, $this->conn_id);
}

默认执行的是如下语句


很明显,直接执行了,基于框架的程序容易造成此类风险。

woyigui同学说的不加引号会报错,这个应该是个合理的解释吧。

最后再次感谢亲爱的黑哥。

mysql中的0引发的安全风险
分享到:
开启MYSQL账号的远程登陆功能
开启MYSQL账号的远程登陆功能 xiaoz 个人的学习笔记,如有错误还请指出来,谢谢。 好长时间没写笔记了,郁闷,学习状况大不如前了。首先,明白一点,并不是mysql禁止远程连接,而是MYSQL的账号禁止远程连接。可能觉得我有点咬文嚼字了,不过我感觉分清这点还是很重要的。默认情况下,所有账号都是禁止远程连接的。(在安装M...
mysql的比较运算
mysql的比较运算 5up3rh3iblog 在menzhi007的blog里看到非常有意思的东西: html">http://www.2cto.com/database/201003/45293.html 在mysql手册里: http://www.phpchina.com/manual/mysql/functions.html#comparison-operators MySQL按照以下规则进行数值比较: 若有一个或两个参数为 NULL,除非NULL-safe 等算符,则...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……