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




上一篇
发表评论
评论列表(无评论)