管理后台的登录功能-重新思考

每个网站、APP都几乎必然有其管理后台,其中管理的内容则是公司的核心技术财产。而登录模块则是这扇大门,其安全的重要性可想而知。我们知道,功能越多,安全性就会越低,所以我们有必要重新审视一下,管理后台的登录界面到底需要些什么功能。

一、功能模块的取舍

1、基本的账号密码登录。这个无可避免是必然需要的了。

2、图片验证码。验证码的目的是为了阻止机器人暴力撞库,作为管理后台很有必要,而且是要每次登录请求都需重新验证。

3、填完用户名或密码时,Ajax实时验证。这个功能常见于一些自动管理后台的注册模块,用于验证用户名是否已被占用。但此功能通常会导致不需经过验证码验证,从而使得暴力撞库有机可乘。

4、记住我选项。这是一个使用cookie记住登录用户的功能,使用户下次再来时可以不需要再登录即可通过验证。但cookie必然需要记录 用户ID或用户名 相关的信息,存在浏览器中,有一定的CSRF攻击风险和信息泄漏风险。

5、找回密码功能。这是一个高危功能,无论是逻辑疏漏还是安全不严谨,都会导致账号的失窃。参考1月份支付宝找回密码的危机。所以建议做法是,公司文档保存相关的账号密码信息,如遇实在无法登录,则找技术人员进入数据库修改密码(加密后)。

6、注册功能。这个不要做在外面,在后台的功能里加一个添加用户会安全很多。

7、第三方登录。如QQ登录、微信登录?不需要,大家都知道QQ很容易被盗号,不宜作为安全性要求高的系统的登录入口。微信则需要拿手机出来扫码,不如直接输入密码来得方便,另外它还需要申请微信公众号以及500块每年的公众号认证费用。

综上,得出一个够用、安全的管理后台的登录界面

二、安全功能

1、验证码安全。以AJAX提交为例,每次尝试登录后,无论是否登录成功,后端都要注销当前验证码SESSION,前端JS刷新验证码。后台要注销SESSION是以免黑客屏蔽JS导致验证码只需一写次,从而导致爆库。

2、网络传输安全。最好使用https加密,以免网络传输过程泄露账号密码,如在咖啡店等他人WIFI环境。如果没有使用HTTPS,则应该在前端JS加密登录名和密码,后端再解密。因为JS是明文的,所以要使用非对称性加密(如RSA),JS使用公钥加密,服务端使用私钥解密。甚至对JS文件本身也可以作一些加密压缩。为什么登录名也要加密呢?还是避免信息泄露,以免别人根据登录名猜出密码。

3、登录成功时重新生成SESSION_ID。主要是为了防止固定会话ID的CSRF攻击

三、登录日志

知己知彼,战斗才能胜利。上面这些功能和安全,都是一些通用的防守攻击套路。但敌人在暗我在明,敌人什么时候派出过特务,什么时候发出过攻击,发起了什么样的攻击?仅通过上面的功能,我们无从得知。所以,我们还需要一个监控器--登录日志。

然后这个登录日志,我们需要记录些什么东西呢? 登录名、是否成功、IP地址、时间。但是,这还不够,这样我们只能分析到了是谁有攻击我们,但是分析不到他是通过什么方式来攻击。那还要记录什么呢?URL地址(含GET数据)、POST数据。但需要注意的是,我们登录时的密码也在POST数据里,切不可将密码存储在登录日志里,即使是RSA加密过的也不行,应以***星号代替,否则这和明文存储密码没什么差别。

四、前端代码

前端代码的要点是登录时RSA加密账号密码,使用的是 jsencrypt.js 库,Ajax提交表单用的是 jquery.form.js 。核心代码如下,需要注意的是,ajaxForm接受的这两个回调函数,参数名是固定的无法修改,修改表单数据用的是formData,提交成功回调的结果名是responseText。标紫色的两个变量是后台输出的模板变量。

//AJAX提交登录表单
$(function(){
    var formSubOpt = {
        beforeSubmit: encodeForm,
        success: formRes
    };
    $("#loginform").ajaxForm( formSubOpt );
});
//提交成功
function formRes(responseText){    //参数名要为这个
//    console.log(responseText);
    ajaxAlerts(responseText);    //提示
    if(responseText.code<0){
        changeVer();
        $("input[name=ver]").val("");
    }
    if(responseText && responseText.code==0){
        setTimeout(function(){
            location.href = "{$toURL}";
        },750);
    }
}

//RSA加密账号密码
var RSApubKey = "{$RSApubKey}";
//console.log(RSApubKey);
function encodeForm(formData){
//    console.log(formData);    //这是要提交的参数
    var crypt = new JSEncrypt();
    crypt.setKey( RSApubKey );
    var USER = crypt.encrypt( $("input[name=name]").val() );
    var PW = crypt.encrypt( $("input[name=psw]").val() );
//    console.log( PW );
    formData[0].value = USER;
    formData[1].value = PW;
}

五、后端代码

略。按前面的分析思路来写即可

时间: 2024-10-12 08:45:54

管理后台的登录功能-重新思考的相关文章

discuz 数据库密码修改后 管理后台不能登录问题

修改配置文件: vim /usr/local/apache2/htdocs/config/config_ucenter.php 将define('UC_DBPW', 'david'); ####david  就是修改后的密码 config_global.php config_ucenter.phpuc_server/data下的config.inc.php 中的DBPW  改成更改后的密码

一步步带你做vue后台管理框架(三)——登录功能

系列教程<一步步带你做vue后台管理框架>第三课 github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 <一步步带你做vue后台管理框架>第二课:上手使用 认证又称"验证"."鉴权",是指通过一定的手段,完成对用户身份的确认.身份验证的方法有很多,基本上可分为:基于共享密钥的身份验证.基于生物学特征的身份验证和基于公开密钥加密算法的身份验证. 登录鉴权功能是

Ecshop:后台添加新功能栏目以及管理权限设置

一.添加菜单项 打开 /admin/includes/inc_menu.php文件(后台框架左边菜单),在最后添加一行如下: 1$modules['17_other_menu']['sns_list'] = 'sns_list.php?act=list'; ecshop默认一级菜单项有16项,所里这里的例子从17开始.当然这个key可以随便取的,index.php文件中对菜单用 了ksort排序.“17_other_menu” 表示一级菜单,“sns_list”表示二级菜单.等号后面的值表示该菜

《暗黑世界GM管理后台系统》部署+功能说明文档

(一)功能描述 该后台共分为三大部分:服务器管理.单服数据统计和扶持账号管理. 1.服务器管理: 根据管理后台数据库中填写的服务器信息(后面会讲到如何填写要管理的服务器的信息到数据库中),该部分可以看到所有服务器的名称,ip地址,开服时间以及开启状况,其中对服务器的开启.关闭功能尚未开放.在运营商及服务器后面的下拉列表中可根据需求选择对应的游戏服务器进行管理. 2.单服数据统计: 同上,需要先在运营商及服务器后面的下拉列表中选择对应的服务器,才可查看相应服务器的信息. 这部分分为单日的详细数据和

SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能

SpringBoot注册登录(一):User表的设计点击打开链接SpringBoot注册登录(二):注册---验证码kaptcha的实现点击打开链接      SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能点击打开链接     SpringBoot注册登录(四):登录功能--密码错误三次,需要等待2分钟才能登录,固定时间内不能登录点击打开链接 SpringBoot注册登录(五):登录功能--Scheduling Tasks定时作业,用于某个时间段允许/不允

Django Admin Cookbook-17如何仅限特定用户登录Django Admin管理后台

17.如何仅限特定用户登录Django Admin管理后台? 只有勾选了is_staff=True的用户才允许登录Django Admin管理后台.要禁止用户访问Admin后台,可以应该设置该用户is_staff=False. 同样,超级管理员可以通过is_superuser=True设置.如果is_staff=False的用户尝试登录管理后台,将看到如下消息. 返回目录 原文地址:https://www.cnblogs.com/superhin/p/12174549.html

SSM框架实现登录功能 (后台)

SSM框架实现简单的登录功能,需要实现查询数据库中user并比对输入的账号密码 首先需要创建实体类,表中各个字段在实体类中写出来,并写出构造方法,get set方法 Mapper: <mapper namespace="User"> <resultMap type="com.zy.music.pojo.User" id="userResult"> <id property="userId" col

php实现管理员登录功能

打开Dreamweaver cs6,添加以下代码: <? if($_POST[user])                 //判断是否输入用户名 { $name=$_POST["user"];                 //获取登录用户名 $pass=$_POST["pass"];                 //获取登录密码 require "ch16-1.php";                  //引用配置文件 $li

[转]你会做Web上的用户登录功能吗?

转自:http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关系到用户安全的功能,希望大家能从下面的文章中能知道什么样的方法才是一个好的用户登录功能.以下内容,转载时请保持原文一致,并请注明作者和出处. 用户名和口令 首先,我们先来说说用户名和口令的事.这并不是本站第一次谈论这