那个,自从上次网站后台登录页被打开,我就觉得现在的网站黑科技非常的先进。为了防止被破防,我就加强网站后台登录了,甚至,我还重写了后台登录页面代码。先下载官网的看看,看官网的登录页代码,这不是应届毕业生水准嘛。
//只允许用户名和密码用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那样随意果奔,一分钟内输错三次就只是来个验证码。
本文结束
评论专区
发表评论
评论列表(无评论)