来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] 由于代码设计缺陷 导致网站任意用户登录影响文件:flow php 188行开始elseif ($_REQUEST[ 39;step 39;] == 39;login 39;){ include_once( 39;languages 39; $_CFG[ 39;lang 39;] 39;...
由于代码设计缺陷 导致网站任意用户登录
影响文件:flow.php 188行开始
elseif ($_REQUEST['step'] == 'login') { include_once('languages/'. $_CFG['lang']. '/user.php'); /* * 用户登录注册 */ if ($_SERVER['REQUEST_METHOD'] == 'GET') ..... else { include_once('includes/lib_passport.php'); if (!empty($_POST['act']) && $_POST['act'] == 'signin') { $captcha = intval($_CFG['captcha']); if (($captcha & CAPTCHA_LOGIN) && (!($captcha & CAPTCHA_LOGIN_FAIL) || (($captcha & CAPTCHA_LOGIN_FAIL) && $_SESSION['login_fail'] > 2)) && gd_version() > 0) { if (empty($_POST['captcha'])) { show_message($_LANG['invalid_captcha']); } /* 检查验证码 */ include_once('includes/cls_captcha.php'); $validator = new captcha(); $validator->session_word = 'captcha_login'; if (!$validator->check_word($_POST['captcha'])) { show_message($_LANG['invalid_captcha']); } } if ($user->login($_POST['username'], $_POST['password'],isset($_POST['remember']))) { ..... }
上面代码中执行了 登录操作 $user->login($_POST['username'], $_POST['password'],isset($_POST['remember'])
login方法如下:
( function login($username, $password, $remember = null) { if ($this->check_user($username, $password) > 0) { if ($this->need_sync) { $this->sync($username,$password); } $this->set_session($username); $this->set_cookie($username, $remember); return true; } else { return false; } } function check_user($username, $password = null) { $post_username = $username; /* 如果没有定义密码则只检查用户名 */ if ($password === null) { $sql = "SELECT " . $this->field_id . " FROM " . $this->table($this->user_table). " WHERE " . $this->field_name . "='" . $post_username . "'"; return $this->db->getOne($sql); } else { $sql = "SELECT " . $this->field_id . " FROM " . $this->table($this->user_table). " WHERE " . $this->field_name . "='" . $post_username . "' AND " . $this->field_pass . " ='" . $this->compile_password(array('password'=>$password)) . "'"; return $this->db->getOne($sql); } }
登录操作最终执行check_user方法,当用户密码为null时,只判断用户名。而在flow.php中并没有对密码进行判断或者初始化。可以只通过账号就可以实现登录。
url: ./flow.php?step=login
POST: act=signin&username=xxxx&captcha=yyyyy
captcha是验证码,有时候是不需要验证码的
修复方法: 初始化密码就好 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com