zoukankan      html  css  js  c++  java
  • 公司僵尸帐号引发了一系列的入侵事件-细说密码强度验证的重要性

    一、前言

    每个公司几乎都会有一个公司的内部系统,每个员工的入职的的时候都会给开一个帐号,一般开帐号的这个人不会考虑帐号的安全性,用户名大多都是员工的姓名或者工号,密码也是姓名或者工号或者123456,如果可以输入123的话估计就设置123了,哈哈,那么问题就来了。如果这个员工不用这个系统不用这个系统或者不重置密码,很容易让别人登录的,导致公司内部的系统信息外泄,损失惨重。

    最近公司的内部系统发现了异常,一些帐号在一些奇怪的地方登录,密码几乎大部分是弱密码,什么123456,123abc,654321,123654,自己姓名拼音,工号等等。

    出现这样的问题一般是公司员工流动性大,负责人经常变动,开帐号和关闭帐号的人疏忽,员工自己没有安全意识,归根到底还是程序员没有把程序写好才造成的问题!!!

    在网上经常看到密码的强度的验证的控件,感觉很好,下面这个控件可以借鉴基本效果如下:

    二、基本实现

    实现起来其实很简单,就是对输入的密码进行了验证,代码一个js文件,一个样式表,一个页面

    checkIntensity.js

    function CheckIntensity(pwd) {
        var mcolor, wcolor, scolor, colorHtml;
        //var pstrength = $(".passwordStrength");
        var m = 0;
        var modes = 0;
        var i;
        for (i = 0; i < pwd.length; i++) {
            var charType;
            var t = pwd.charCodeAt(i);
            if (t >= 48 && t <= 57) { charType = 1; }
            else if (t >= 65 && t <= 90) { charType = 2; }
            else if (t >= 97 && t <= 122) { charType = 4; }
            else { charType = 8; }
            modes |= charType;
        }
        for (i = 0; i < 4; i++) {
            if (modes & 1) { m++; }
            modes >>>= 1;
        }
        if (pwd.length < 6) { m = 0; }
        //if (pwd.length <= 0) { m = 0; }
        switch (m) {
            case 1:
                //pstrength.find("span:first").addClass("bgStrength");
                wcolor = "pwd pwd_Weak_c";
                mcolor = "pwd pwd_c";
                scolor = "pwd pwd_c pwd_c_r";
                colorHtml = "弱";
                break;
            case 2:
                //pstrength.find("span:lt(2)").addClass("bgStrength");
                wcolor = "pwd pwd_Medium_c";
                mcolor = "pwd pwd_Medium_c";
                scolor = "pwd pwd_c pwd_c_r";
                colorHtml = "中";
                break;
            case 3:
            case 4:
                //pstrength.find("span:lt(3)").addClass("bgStrength");
                wcolor = "pwd pwd_Strong_c";
                mcolor = "pwd pwd_Strong_c";
                scolor = "pwd pwd_Strong_c pwd_Strong_c_r";
                colorHtml = "强";
                break;
            default:
                //pstrength.find("span").removeClass("bgStrength");
                wcolor = "pwd pwd_c";
                mcolor = "pwd pwd_c pwd_f";
                scolor = "pwd pwd_c pwd_c_r";
                colorHtml = "";
                break;
        }
        document.getElementById('pwd_Weak').className = wcolor;
        document.getElementById('pwd_Medium').className = mcolor;
        document.getElementById('pwd_Strong').className = scolor;
        document.getElementById('pwd_Medium').innerHTML = colorHtml;
        if (m < 2) {
            $("#tdTip").show();
        } else {
            $("#tdTip").hide();
        }
        return m;
    }

    样式表文件pwdIntensity.css

    .pwd {
        width: 40px;
        height: 16px;
        line-height: 14px;
        padding-top: 2px;
    }
    
    .pwd_f {
        color: #BBBBBB;
    }
    
    .pwd_c {
        background-color: #F3F3F3;
        border-top: 1px solid #D0D0D0;
        border-bottom: 1px solid #D0D0D0;
        border-left: 1px solid #D0D0D0;
    }
    
    .pwd_Weak_c {
        background-color: #FF4545;
        border-top: 1px solid #BB2B2B;
        border-bottom: 1px solid #BB2B2B;
        border-left: 1px solid #BB2B2B;
    }
    
    .pwd_Medium_c {
        background-color: #FFD35E;
        border-top: 1px solid #E9AE10;
        border-bottom: 1px solid #E9AE10;
        border-left: 1px solid #E9AE10;
    }
    
    .pwd_Strong_c {
        background-color: #3ABB1C;
        border-top: 1px solid #267A12;
        border-bottom: 1px solid #267A12;
        border-left: 1px solid #267A12;
    }
    
    .pwd_c_r {
        border-right: 1px solid #D0D0D0;
    }
    
    .pwd_Weak_c_r {
        border-right: 1px solid #BB2B2B;
    }
    
    .pwd_Medium_c_r {
        border-right: 1px solid #E9AE10;
    }
    
    .pwd_Strong_c_r {
        border-right: 1px solid #267A12;
    }
    
    .pwd_table {
        border-collapse: collapse;
    }
    
        .pwd_table td {
            padding: 0;
            border: 0;
            text-align: center;
            border: 3px solid white;
        }

    页面代码:

    @{
        ViewBag.Title = "Index";
    }
    
    <h2>http://www.cnblogs.com/yinrq/</h2>
    <style>
        .updatePwd {
            padding: 10px 0;
            color: #666;
        }
    
            .updatePwd > p {
                margin-left: 20px;
            }
    
            .updatePwd dl dt {
                display: block;
                float: left;
                width: 100px;
                text-align: right;
                color: #333;
            }
    
            .updatePwd dl dd {
                margin-left: 120px;
                width: 250px;
            }
    
            .updatePwd dl {
                clear: both;
                display: block;
                padding: 8px 0;
            }
    
                .updatePwd dl:after {
                    clear: both;
                    content: ".";
                    display: block;
                    height: 0;
                    visibility: hidden;
                }
    
            .updatePwd .input {
                box-sizing: border-box;
                border: solid 1px #d2d9e2;
                height: 25px;
                width: 200px;
                /*padding-left: 65px;*/
                border-radius: 3px;
                outline: none;
                font-size: 14px;
                color: #465767;
                /*margin-bottom: 20px;*/
            }
    
                .updatePwd .input:focus {
                    border-color: #3db6e4;
                }
    </style>
    <link href="/css/pwdIntensity.css" rel="stylesheet" />
    <script type="text/javascript" src="/Script/checkIntensity.js"></script>
    <script type="text/javascript">
        function checkSubmit() {
            var grade = CheckIntensity($("#txtNewPassword").val());
            if (grade < 2) {
                alert("密码太简单!");
            } else {
                alert("密码够复杂的!提交成功!");
            }
        }
    </script>
    
    <div id="updatePwd" class="updatePwd">
        <p>
            您是首次登陆或密码已过期,请修改密码!
        </p>
        <dl>
            <dt>用户名:</dt>
            <dd>
                <input id="txtUser" name="txtUser" class="input" value="yinrq" />
                <span>&nbsp;</span>
            </dd>
        </dl>
        <dl>
            <dt>旧登录密码:</dt>
            <dd>
                <input id="txtOldPassword" name="txtOldPassword" class="input" type="password" />
                <span style="color: red">*</span>
            </dd>
        </dl>
        <dl>
            <dt>新登录密码:</dt>
            <dd>
                <input id="txtNewPassword" name="txtNewPassword" class="input" type="password" onkeyup="CheckIntensity(this.value)" />
                <span style="color: red">*</span>
                <div style="margin-top: 10px;">
                    <table class="pwd_table">
                        <tr>
                            <td style="text-align: left;">密码强度</td>
                            <td id="pwd_Weak" class="pwd pwd_c">&nbsp;</td>
                            <td id="pwd_Medium" class="pwd pwd_c pwd_f">&nbsp;</td>
                            <td id="pwd_Strong" class="pwd pwd_c pwd_c_r">&nbsp;</td>
                        </tr>
                        <tr>
                            <td colspan="4" >强度为中或者强才可以提交!</td>
                        </tr>
                    </table>
                </div>
            </dd>
        </dl>
        <dl>
            <dt>确认新密码:</dt>
            <dd>
                <input id="txtConfirmNewPassword" name="txtConfirmNewPassword" class="input" type="password" />
                <span class="Validform_checktip" style="color: red">*</span>
            </dd>
        </dl>
        <dl>
            <dt></dt>
            <dd><input id="Sava" name="Sava" type="button" value="确认修改"  onclick="return checkSubmit();" /></dd>
        </dl>
    </div>

    代码在下面会提供下载,可以研究学习下,

    https://yunpan.cn/cqRpBdWjsVraU (提取码:4e2c)

    三、总结

    1、密码要加强度验证

    2、密码要根据配置文件的过期时间定期强制用户修改

    3、系统安全人人有责

    最好在上一张强制修改密码的图

  • 相关阅读:
    没用完的手机流量是否清零?讨论+吐槽
    南方周末:《系统》
    如何将Excel表批量赋值到ArcGIS属性表
    解决4K屏电脑显示问题
    坐标或测量值超出范围
    快速手工实现软件著作权源码60页制作
    SVN版本更新自动通知提醒
    1130不允许连接到MySql server
    Win10中SVN图标不显示的解决
    注意地理坐标系下的距离和面积计算
  • 原文地址:https://www.cnblogs.com/yinrq/p/5359651.html
Copyright © 2011-2022 走看看