网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

ECSHOP前台任意用户登录 - 网站安全 - 自学php

来源:自学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

添加评论