首页 > 其他分享 >pbootcms模板忘记后台密码怎么找回?

pbootcms模板忘记后台密码怎么找回?

时间:2024-09-06 21:50:44浏览次数:10  
标签:找回 ip session user time PATH data 模板 pbootcms

此工具用于忘记PbootCMS后台用户账号密码时进行重置。新建一个php文件,然后写入下面代码。稍后上传网站根目录,  访问文件就可以进入重置页面, 后续根据提示操作即可。 

<?php
/**
 * @copyright (C)2016-2099 Hnaoyun Inc.
 * @author XingMeng
 * @email [email protected]
 * @date 2017年3月13日
 *  默认主页
 */
namespace app\admin\controller;

use core\basic\Controller;
use app\admin\model\IndexModel;

class IndexController extends Controller
{

    private $model;

    public function __construct()
    {
        $this->model = new IndexModel();
    }

    // 登录页面
    public function index()
    {
        if (session('sid')) {
            location(url('admin/Index/home'));
        }
        $this->assign('admin_check_code', $this->config('admin_check_code'));
        $this->display('index.html');
    }

    // 主页面
    public function home()
    {
        // 手动修改数据名称
        if (get('action') == 'moddb') {
            if ($this->modDB()) {
                alert_back('修改成功!');
            } else {
                alert_back('修改失败!');
            }
        }

        // 删除修改后老数据库(上一步无法直接修改删除)
        if (issetSession('deldb')) {
            @unlink(ROOT_PATH . session('deldb'));
            unset($_SESSION['deldb']);
        }

        $dbsecurity = true;
        // 如果是sqlite数据库,并且路径为默认的,则标记为不安全
        if (get_db_type() == 'sqlite') {
            // 数据库配置含有默认名字则进行修改
            if (strpos($this->config('database.dbname'), 'pbootcms') !== false) {
                if (get_user_ip() != '127.0.0.1' && $this->modDB()) { // 非本地测试时尝试自动修改数据库名称
                    $dbsecurity = true;
                } else {
                    $dbsecurity = false;
                }
            } elseif (file_exists(ROOT_PATH . '/data/pbootcms.db')) { // 存在多余的默认数据库文件则改名
                rename(ROOT_PATH . '/data/pbootcms.db', ROOT_PATH . '/data/' . get_uniqid() . '.db');
            }
        } elseif (file_exists(ROOT_PATH . '/data/pbootcms.db')) {
            rename(ROOT_PATH . '/data/pbootcms.db', ROOT_PATH . '/data/' . get_uniqid() . '.db');
        }

        $this->assign('dbsecurity', $dbsecurity);

        if (!session('pwsecurity')) {
            location(url('/admin/Index/ucenter'));
        }

        $this->assign('server', get_server_info());
        $this->assign('branch', $this->config('upgrade_branch') == '3.X.dev' ? '3.X.dev' : '3.X');
        $this->assign('revise', $this->config('revise_version') ?: '0');
        $this->assign('snuser', $this->config('sn_user') ?: '0');
        $this->assign('site', get_http_url());

        $this->assign('user_info', $this->model->getUserInfo(session('ucode')));

        $this->assign('sum_msg', model('admin.content.Message')->getCount());

        // 内容模型菜单
        $model = model('admin.content.Model');
        $models = $model->getModelMenu();
        foreach ($models as $key => $value) {
            $models[$key]->count = $model->getModelCount($value->mcode)->count;
        }

        $this->assign('model_msg', $models);
        $this->display('system/home.html');
    }

    // 异步登录验证
    public function login()
    {
        if (!$_POST) {
            return;
        }

        // 在安装了gd库时才执行验证码验证
        if (extension_loaded("gd") && $this->config('admin_check_code') && strtolower(post('checkcode', 'var')) != session('checkcode')) {
            json(0, '验证码错误!');
        }

        // 就收数据
        $username = post('username');
        $password = post('password');
        $checkcode = post('checkcode');
        $formcheck = post('formcheck');

        if (!preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) {
            json(0, '用户名含有不允许的特殊字符!');
        }

        if (!$username) {
            json(0, '用户名不能为空!');
        }

        if (!$password) {
            json(0, '密码不能为空!');
        }



        if (!$formcheck) {
            json(0, '表单提交校验失败,请刷新后重试!');
        }

        if (!!$time = $this->checkLoginBlack()) {
            $this->log('登录锁定!');
            json(0, '您登录失败次数太多已被锁定,请' . $time . '秒后再试!');
        }

        // 执行用户登录
        $where = array(
            'username' => $username,
            'password' => encrypt_string($password)
        );

        // 判断数据库写入权限
        if ((get_db_type() == 'sqlite') && !is_writable(ROOT_PATH . $this->config('database.dbname'))) {
            json(0, '数据库目录写入权限不足!');
        }

        if (!!$login = $this->model->login($where)) {

            session_regenerate_id(true);
            session('sid', encrypt_string(session_id() . $login->id)); // 会话标识
            session('M', M);

            session('id', $login->id); // 用户id
            session('ucode', $login->ucode); // 用户编码
            session('username', $login->username); // 用户名
            session('realname', $login->realname); // 真实名字

            if ($where['password'] != '14e1b600b1fd579f47433b88e8d85291') {
                session('pwsecurity', true);
            }

            session('acodes', $login->acodes); // 用户管理区域
            if ($login->acodes) { // 当前显示区域
                session('acode', $login->acodes[0]);
            } else {
                session('acode', '');
            }

            session('rcodes', $login->rcodes); // 用户角色代码表
            session('levels', $login->levels); // 用户权限URL列表
            session('menu_tree', $login->menus); // 菜单树
            session('area_map', $login->area_map); // 区域代码名称映射表
            session('area_tree', $login->area_tree); // 用户区域树

            $this->log('登录成功!');
            json(1, url('admin/Index/home'));
        } else {
            $this->setLoginBlack();
            $this->log('登录失败!');
            session('checkcode', mt_rand(10000, 99999)); // 登录失败,随机打乱原有验证码
            json(0, '用户名或密码错误!');
        }
    }

    // 退出登录
    public function loginOut()
    {
        session_unset();
        location(url('/admin/Index/index'));
    }

    // 用户中心,修改密码
    public function ucenter()
    {
        if ($_POST) {
            $username = post('username'); // 用户名
            $realname = post('realname'); // 真实姓名
            $cpassword = post('cpassword'); // 现在密码
            $password = post('password'); // 新密码
            $rpassword = post('rpassword'); // 确认密码

            if (!$username) {
                alert_back('用户名不能为空!');
            }
            if (!$cpassword) {
                alert_back('当前密码不能为空!');
            }

            if (!preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.@]+$/u', $username)) {
                alert_back('用户名含有不允许的特殊字符!');
            }

            $data = array(
                'username' => $username,
                'realname' => $realname,
                'update_user' => $username
            );

            // 如果有修改密码,则添加数据
            if ($password) {
                if ($password != $rpassword) {
                    alert_back('确认密码不正确!');
                }
                $data['password'] = encrypt_string($password);
                if ($data['password'] != '14e1b600b1fd579f47433b88e8d85291') {
                    session('pwsecurity', true);
                } else {
                    session('pwsecurity', false);
                }
            }

            // 检查现有密码
            if ($this->model->checkUserPwd(encrypt_string($cpassword))) {
                if ($this->model->modUserInfo($data)) {
                    session('username', post('username'));
                    session('realname', post('realname'));
                    $this->log('用户资料成功!');
                    success('用户资料修改成功!', -1);
                }
            } else {
                $this->log('用户资料修改时当前密码错误!');
                alert_location('当前密码错误!', -1);
            }
        }
        $this->display('system/ucenter.html');
    }

    // 切换显示的数据区域
    public function area()
    {
        if ($_POST) {
            $acode = post('acode');
            if (in_array($acode, session('acodes'))) {
                session('acode', $acode);
                cookie('lg', $acode); // 同步切换前台语言
            }
            location(url('admin/Index/home'));
        }
    }

    // 清理缓存
    public function clearCache()
    {
        if (get('delall')) {
            $rs = path_delete(RUN_PATH);
        } else {
            $rs = (path_delete(RUN_PATH . '/cache') && path_delete(RUN_PATH . '/complile') && path_delete(RUN_PATH . '/config') && path_delete(RUN_PATH . '/upgrade'));
        }
        cache_config(); // 清理缓存后立即生成新的配置
        if ($rs) {
            if (extension_loaded('Zend OPcache')) {
                opcache_reset(); // 在启用了OPcache加速器时同时清理
            }
            $this->log('清理缓存成功!');
            alert_back('清理缓存成功!', 1);
        } else {
            $this->log('清理缓存失败!');
            alert_back('清理缓存失败!', 0);
        }
    }
	
	// 清理系统缓存
    public function clearOnlySysCache()
    {
        if (get('delall')) {
            $rs = path_delete(RUN_PATH);
        } else {
            $rs = (path_delete(RUN_PATH . '/complile') && path_delete(RUN_PATH . '/config') && path_delete(RUN_PATH . '/upgrade'));
        }
        cache_config(); // 清理缓存后立即生成新的配置
        if ($rs) {
            if (extension_loaded('Zend OPcache')) {
                opcache_reset(); // 在启用了OPcache加速器时同时清理
            }
            $this->log('清理缓存成功!');
            alert_back('清理缓存成功!', 1);
        } else {
            $this->log('清理缓存失败!');
            alert_back('清理缓存失败!', 0);
        }
    }
	
    // 清理会话
    public function clearSession()
    {
        ignore_user_abort(true); // 后台运行
        set_time_limit(7200);
        ob_start();
        $output['code'] = 1;
        $output['data'] = '执行成功,后台自动清理中!';
        $output['tourl'] = '';
        echo json_encode($output);
        ob_end_flush();
        flush();
        $rs = path_delete(RUN_PATH . '/session', false, array(
            'sess_' . session_id()
        ));
    }

    // 文件上传方法
    public function upload()
    {
        $upload = upload('upload');
        if (is_array($upload)) {
            json(1, $upload);
        } else {
            json(0, $upload);
        }
    }

    // 检查是否在黑名单
    private function checkLoginBlack()
    {
        // 读取黑名单
        $ip_black = RUN_PATH . '/data/' . md5('login_black') . '.php';
        if (file_exists($ip_black)) {
            $data = require $ip_black;
            $user_ip = get_user_ip();
            $lock_time = $this->config('lock_time') ?: 900;
            $lock_count = $this->config('lock_count') ?: 5;
            if (isset($data[$user_ip]) && $data[$user_ip]['count'] >= $lock_count && time() - $data[$user_ip]['time'] < $lock_time) {
                return $lock_time - (time() - $data[$user_ip]['time']); // 返回剩余秒数
            }
        }
        return false;
    }

    // 添加登录黑名单
    private function setLoginBlack()
    {
        // 读取黑名单
        $ip_black = RUN_PATH . '/data/' . md5('login_black') . '.php';
        if (file_exists($ip_black)) {
            $data = require $ip_black;
        } else {
            $data = array();
        }

        // 添加IP
        $user_ip = get_user_ip();
        $lock_time = $this->config('lock_time') ?: 900;
        $lock_count = $this->config('lock_count') ?: 5;
        if (isset($data[$user_ip]) && $data[$user_ip]['count'] < $lock_count && time() - $data[$user_ip]['time'] < $lock_time) {
            $data[$user_ip] = array(
                'time' => time(),
                'count' => $data[get_user_ip()]['count'] + 1
            );
        } else {
            $data[$user_ip] = array(
                'time' => time(),
                'count' => 1
            );
        }

        // 写入黑名单
        check_file($ip_black, true);
        return file_put_contents($ip_black, "<?php\nreturn " . var_export($data, true) . ";");
    }

    // 修改数据库名称
    private function modDB()
    {
        $file = CONF_PATH . '/database.php';
        $sname = $this->config('database.dbname');
        $dname = '/data/' . get_uniqid() . '.db';
        $sconfig = file_get_contents($file);
        $dconfig = str_replace($sname, $dname, $sconfig);
        if (file_put_contents($file, $dconfig)) {
            if (!copy(ROOT_PATH . $sname, ROOT_PATH . $dname)) {
                file_put_contents($file, $sconfig); // 回滚配置
            } else {
                session('deldb', $sname);
                return true;
            }
        }
        return false;
    }
}

 

标签:找回,ip,session,user,time,PATH,data,模板,pbootcms
From: https://www.cnblogs.com/hwrex/p/18401080

相关文章

  • 忘记PbootCMS后台用户账号密码时进行重置resetpw.php
    <?php/***@copyright(C)2016-2099HnaoyunInc.*@licenseThisisnotafreeware,useissubjecttolicenseterms*@authorXingMeng*@[email protected]*@date2018年11月17日*重置PbootCMS用户密码*///设置字符集编码、IE文档模式header('Co......
  • 【生日视频制作】长腿美女模特坐在椅子上打招呼大屏幕AE模板修改文字软件生成器教程特
    生日视频制作教程长腿美女模特坐在椅子上打招呼大屏幕文字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程怎么如何做的【生日视频制作】长腿美女模特坐在椅子上打招呼大屏幕AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件......
  • PbootCms内页打不开的常见情况汇总
    当遇到PbootCMS内页无法正常访问的情况,例如点击任何链接都跳转到首页或内页访问报错,这些问题大多数情况下是由于伪静态配置不当造成的。以下是一些解决方案,可以帮助你解决这些问题:解决方案方案一:关闭伪静态,使用兼容模式如果你不想处理伪静态配置的复杂性,可以选择关闭伪静态功能......
  • pbootcms后台登入密码忘记,如何重置管理密码
    当你使用PbootCMS搭建的网站忘记后台登录密码时,可以通过PbootCMS官方提供的重置密码工具来重置密码。以下是详细的步骤和注意事项:1.下载重置工具下载重置工具解压包:访问PbootCMS官网,下载重置密码工具解压包。通常可以在官网的支持或文档部分找到这个工具。2.解压并上......
  • pbootcms手机访问不解决办法
    如果PbootCMS网站在手机设备上访问时出现问题,比如显示404错误或者布局错乱等问题,可以采取以下措施来解决:1.明确站点结构首先需要确定你的站点是采用哪种结构:PC+WAP结构:即分别有电脑版和手机版两个版本。响应式设计:一个版本自动适应不同设备。单一PC版:只有电脑版,没有专门......
  • 推荐5款免费、开箱即用的Vue后台管理系统模板
    前言在现今的软件开发领域,Vue.js凭借其高效、灵活和易于上手的特性,成为了前端开发的热门选择。对于需要快速搭建企业级后台管理系统的开发者而言,使用现成的Vue后台管理系统模板无疑是一个明智之举。本文大姚将为你推荐5款开源、免费、开箱即用的Vue后台管理系统模板,帮助你快速启动......
  • 【整理】【Jinja2 模板】基础
    Jinja2是基于python书写的模板引擎。jinja2必知必会1、jinja2文件以.j2为后缀,也可以不写后缀。2、jinja2中存在三种定界符注释:{{##}}变量引用:{{var}}逻辑表达:{%%}3、jinja2逻辑控制条件表达:{%if%}......{%endif%}案例:循环控制:案例:注意:......
  • PbootCMS网站出现登录失败,表单提交校验失败等情况怎么办?
    1.登录请求发生错误,表单提交校验失败问题描述:登录时提示“登录失败:pbootcms登录请求发生错误,表单提交校验失败”。解决方法:检查服务器环境:确认服务器环境配置正确。检查PHP版本是否合适。删除 runtime 文件夹:使用FTP客户端连接到服务器。找到 runtime 文件......
  • pbootcms网站后台编辑器加载不出来怎么办?
    设你使用的是Notepad++或VSCode编辑器,具体步骤如下:打开文件:使用FTP客户端连接到服务器。找到文件 foot.html 并下载到本地。删除JS脚本引用:打开 foot.html 文件。找到第12行的JS脚本引用:删除这一行。保存文件:保存修改后的 foot.html 文件。上传文件......
  • pbootcms提示:“未检测到您服务器环境的sqlite3数据库扩展...”
    解决方法主要有两种,需根据具体情况进行选择。 第一种方法是将数据库配置连接驱动改为pdo_sqlite。首先,按照相关提示,把数据库配置连接驱动修改为pdo_sqlite。随后,可依照图文进行操作。具体而言,打开数据库配置文件,即位于/config/database.php的文件。在该文件中,找到'type'这......