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

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

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

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

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

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

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

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

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

PHP
  1. <?php
  2. /**
  3.  * 后台登录
  4.  *
  5.  * @version        $Id: login.php 1 8:48 2010年7月13日 $
  6.  * @package        DedeCMS.Administrator
  7.  * @founder        IT柏拉图, https://weibo.com/itprato
  8.  * @author         DedeCMS团队
  9.  * @copyright      Copyright (c) 2004 - 2024, 上海卓卓网络科技有限公司 (DesDev, Inc.)
  10.  * @license        http://help.dedecms.com/usersguide/license.html
  11.  * @link           http://www.dedecms.com
  12.  */
  13. require_once(dirname(__FILE__).'/../include/common.inc.php');
  14. require_once(DEDEINC.'/userlogin.class.php');
  15. if(empty($dopost)) $dopost = '';
  16.  
  17. //登录检测
  18. if($dopost=='login')
  19. {
  20.     $userid = isset($_POST['userid']) ? $_POST['userid'] : '';
  21.     $pwd = isset($_POST['pwd']) ? $_POST['pwd'] : '';
  22.  
  23.     // 连续登录失败用户锁定
  24.     $fail_limit = isset($cfg_fail_limit) ? $cfg_fail_limit : 3;//输错三次
  25.     $lock_time = isset($cfg_lock_time) ? $cfg_lock_time : 86400;//锁定24小时
  26.     $arr_login = array();
  27.     $filename = DEDEDATA.'/login.data.php';
  28.     if (file_exists($filename)) {
  29.         require_once($filename);
  30.         $arr_login = json_decode($str_login, true);
  31.         if ($arr_login[$userid] != '') {
  32.             $count = explode(',', $arr_login[$userid])[0];
  33.             $timestamp = explode(',', $arr_login[$userid])[1];
  34.             if ($count == $fail_limit && $timestamp + $lock_time > time()) {
  35.                 $date = date('Y-m-d H:i:s', $timestamp + $lock_time);
  36.                 ResetVdValue();
  37.                 ShowMsg("连续登录失败用户锁定!<br>解锁时间:{$date}", 'login.php', 0, 5000);
  38.                 exit();
  39.             }
  40.         }
  41.     }
  42.     // 连续登录失败用户锁定
  43.  
  44.     $validate = isset($_POST['validate']) ? strtolower(trim($_POST['validate'])) : '';
  45.     $svali = strtolower(GetCkVdValue());
  46.     if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){
  47.         ResetVdValue();
  48.         ShowMsg('验证码不正确!','login.php',0,1000);
  49.         exit();
  50.     } else {
  51.         $cuserLogin = new userLogin();
  52.         if(!empty($userid) && !empty($pwd))
  53.         {
  54.             //success
  55.             $res = $cuserLogin->checkUser($userid,$pwd);
  56.             if($res==1)
  57.             {
  58.                 // 连续登录失败用户锁定
  59.                 $count = 0;
  60.                 $timestamp = time();
  61.                 $arr_login[$userid] = "{$count},{$timestamp}";
  62.                 $content = "<?php\r\n\$str_login='".json_encode($arr_login)."';\r\n?>";
  63.                 $fp = fopen($filename, 'w');
  64.                 fwrite($fp, $content);
  65.                 fclose($fp);
  66.                 // 连续登录失败用户锁定
  67.                 $cuserLogin->keepUser();
  68. ShowMsg('成功登录,正在转向管理管理主页!',"index.php");
  69.                 exit();
  70.             }
  71.             //error
  72.             else if($res==-1)
  73.             {
  74.                 ResetVdValue();
  75.                 ShowMsg('用户名或者密码错误!','login.php',0,1000);
  76.                 exit();
  77.             }
  78.             else
  79.             {
  80.                 // 连续登录失败用户锁定
  81.                 $count = 1;
  82.                 $timestamp = time();
  83.                 if ($arr_login[$userid] != '') {
  84.                     $count = explode(',', $arr_login[$userid])[0] + 1;
  85.                     if ($count > $fail_limit) {
  86.                         $count = 1;
  87.                     }
  88.                 }
  89.                 $arr_login[$userid] = "{$count},{$timestamp}";
  90.                 $content = "<?php\r\n\$str_login='".json_encode($arr_login)."';\r\n?>";
  91.                 $fp = fopen($filename, 'w');
  92.                 fwrite($fp, $content);
  93.                 fclose($fp);
  94.                 // 连续登录失败用户锁定
  95.                 ResetVdValue();
  96.                 ShowMsg('用户名或者密码错误!','login.php',0,1000);
  97. exit();
  98.             }
  99.         }
  100.  
  101.         //password empty
  102.         else
  103.         {
  104.             ResetVdValue();
  105.             ShowMsg('用户名和密码没填写完整!','login.php',0,1000);
  106.             exit();
  107.         }
  108.     }
  109. }
  110.  
  111. include('templets/login.htm');

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

本文结束

评论专区

发表评论

评论列表(无评论)