正在读取数据,页面载入中,请稍后...

织梦网站后台登陆页安全加强代码重置版

织梦网站后台登陆页安全加强代码重置版 - 全民博客

那个,自从上次网站后台登录页被打开,我就觉得现在的网站黑科技非常的先进。为了防止被破防,我就加强网站后台登录了,甚至,我还重写了后台登录页面代码。先下载官网的看看,看官网的登录页代码,这不是应届毕业生水准嘛。

//只允许用户名和密码用0-9,a-z,A-Z,'@','_','.','-'这些字符
$userid = preg_replace("/[^0-9a-zA-Z_@!\.-]/", '', $userid);
$pwd = preg_replace("/[^0-9a-zA-Z_@!\.-]/", '', $pwd);

PS:纳尼,禁止输入特殊字符?还是来自官网?谁写的限制的,官网的程序员,是不是有什么大病啊。密码设置特殊字符的话,相对的来说密码就安全了。来看看这个 /dede/sys_admin_user_add.php 页面,这个就是管理员的高难度密码设置了。

if(preg_match("#[^0-9a-zA-Z_@!\.-]#", $pwd) || preg_match("#[^0-9a-zA-Z_@!\.-]#", $userid))
{
    ShowMsg('密码或或用户名不合法,<br />请使用[0-9a-zA-Z_@!.-]内的字符!', '-1', 0, 3000);
    exit();
}
	
if($pwd!='' && !preg_match("#^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$#", $pwd))
{
    ShowMsg('密码必须包含1个数字,1个小写字母,1个大写字母!', '-1', 0, 3000);
    exit();
}
	
if($pwd!='' && !preg_match("#^.{8,128}$#", $pwd))
{
    ShowMsg('密码必须大于8位小于128位!', '-1', 0, 3000);
    exit();
}

请使用[0-9a-zA-Z_@!.-]内的字符!密码必须包含1个数字,1个小写字母,1个大写字母!密码必须大于8位小于128位!

PS:密码难度,高、很高、相当的高。这密码设置要求,数学天才都猜不到密码的吧。

废话少说,今天我要说的是,我把登录页重置了,保留了输错三次限制一天登录。直接上login.php的代码吧。

<?php
/**
 * 后台登录
 *
 * @version        $Id: login.php 1 8:48 2010年7月13日 $
 * @package        DedeCMS.Administrator
 * @founder        IT柏拉图, https://weibo.com/itprato
 * @author         DedeCMS团队
 * @copyright      Copyright (c) 2004 - 2024, 上海卓卓网络科技有限公司 (DesDev, Inc.)
 * @license        http://help.dedecms.com/usersguide/license.html
 * @link           http://www.dedecms.com
 */
require_once(dirname(__FILE__).'/../include/common.inc.php');
require_once(DEDEINC.'/userlogin.class.php');
if(empty($dopost)) $dopost = '';
 
//登录检测
if($dopost=='login')
{
    $userid = isset($_POST['userid']) ? $_POST['userid'] : '';
    $pwd = isset($_POST['pwd']) ? $_POST['pwd'] : '';
 
    // 连续登录失败用户锁定
    $fail_limit = isset($cfg_fail_limit) ? $cfg_fail_limit : 3;//输错三次
    $lock_time = isset($cfg_lock_time) ? $cfg_lock_time : 86400;//锁定24小时
    $arr_login = array();
    $filename = DEDEDATA.'/login.data.php';
    if (file_exists($filename)) {
        require_once($filename);
        $arr_login = json_decode($str_login, true);
        if ($arr_login[$userid] != '') {
            $count = explode(',', $arr_login[$userid])[0];
            $timestamp = explode(',', $arr_login[$userid])[1];
            if ($count == $fail_limit && $timestamp + $lock_time > time()) {
                $date = date('Y-m-d H:i:s', $timestamp + $lock_time);
                ResetVdValue();
                ShowMsg("连续登录失败用户锁定!<br>解锁时间:{$date}", 'login.php', 0, 5000);
                exit();
            }
        }
    }
    // 连续登录失败用户锁定
 
    $validate = isset($_POST['validate']) ? strtolower(trim($_POST['validate'])) : '';
    $svali = strtolower(GetCkVdValue());
    if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){
        ResetVdValue();
        ShowMsg('验证码不正确!','login.php',0,1000);
        exit();
    } else {
        $cuserLogin = new userLogin();
        if(!empty($userid) && !empty($pwd))
        {
            //success
            $res = $cuserLogin->checkUser($userid,$pwd);
            if($res==1)
            {
                // 连续登录失败用户锁定
                $count = 0;
                $timestamp = time();
                $arr_login[$userid] = "{$count},{$timestamp}";
                $content = "<?php\r\n\$str_login='".json_encode($arr_login)."';\r\n?>";
                $fp = fopen($filename, 'w');
                fwrite($fp, $content);
                fclose($fp);
                // 连续登录失败用户锁定
                $cuserLogin->keepUser();
				ShowMsg('成功登录,正在转向管理管理主页!',"index.php");
                exit();
            }
            //error
            else if($res==-1)
            {
                ResetVdValue();
                ShowMsg('用户名或者密码错误!','login.php',0,1000);
                exit();
            }
            else
            {
                // 连续登录失败用户锁定
                $count = 1;
                $timestamp = time();
                if ($arr_login[$userid] != '') {
                    $count = explode(',', $arr_login[$userid])[0] + 1;
                    if ($count > $fail_limit) {
                        $count = 1;
                    }
                }
                $arr_login[$userid] = "{$count},{$timestamp}";
                $content = "<?php\r\n\$str_login='".json_encode($arr_login)."';\r\n?>";
                $fp = fopen($filename, 'w');
                fwrite($fp, $content);
                fclose($fp);
                // 连续登录失败用户锁定
                ResetVdValue();
                ShowMsg('用户名或者密码错误!','login.php',0,1000);
				exit();
            }
        }
 
        //password empty
        else
        {
            ResetVdValue();
            ShowMsg('用户名和密码没填写完整!','login.php',0,1000);
            exit();
        }
    }
}
 
include('templets/login.htm');

你看,你细看,你品,你细品。不小心看到后台登录页被打开过,我就发奋写代码,你这辈子都不可能再打开我的后台登录页了。改写得代码整洁,比官网的安全性高多了,也不像DedeBIZ那样随意果奔,一分钟内输错三次就只是来个验证码。

本文结束

评论专区

发表评论

评论列表(无评论)