有关网站后台密码防御问题

看到了越来越多的网站被黑客或是通过sql注入或是通过其他途径获取到了加密后的密码,发现一个问题就是很多人加密通常只会使用md5这一个函数,打个比方,大部分人的登陆验证可能都是这么写的。(这只是一个例子,通过get获取敏感参数是不正确的)

<?php

$_SESSION['ps'] = '21232f297a57a5a743894a0e4a801fc3'; //ps = admin
if(md5($_GET['ps']) == $_SESSION['ps'])
{
    echo '登陆ok';
}
else
{
    echo '登陆不ok';
}

我把session中的密码和通过get到的密码进行比对,如果密码正确进入正确提示,但是这里有个问题,就是,如果密码设置的不够复杂, 会被人很轻易的破解,于是,有人就想到了, 我可以这样。

<?php

$_SESSION['ps'] = '21232f297a57a5a743894a0e4a801fc3'; //ps = admin
$psa = substr($_SESSION['ps'],5);
if(substr(md5($_GET['ps']),5) == $psa)
{
    echo '登陆ok';
}
else
{
    echo '登陆不ok';
}

可以看到, 这个时候, 连大众化密码admin后的md5都无法被md5破解网站识别了。 那我们再进一步

<?php

$_SESSION['ps'] = '0a113ef6b61820daa5611c870ed8d5ee'; //ps = 888
$_SESSION['city']= 'xuzhou'; //city
$psa = substr($_SESSION['ps'],5);
if(substr(md5($_GET['ps']),5) == $psa)
{
    if($_GET['city']== 'xuzhou' && $_SESSION['city'])
    {
        echo '登陆成功';
    }
}
else
{
    echo '登陆不ok';
}

这个时候, 输入密码也不会登陆成功, 因为还需要输入城市, 这也是现在国外很流行的二次验证模型, 国内看到基本上没有多少网站采用这个, 其实实现起来也不难, 把历史ip数据存入数据库进行比对就可以了。经过这样的处理, 就可以在相对程度上最大减少后台密码被黑客破解的可能, 当然有一个前提是, 你不能是明文密码, 最好后端的数据二次确认要做好,别有sql注入, 命令执行类的漏洞。 今天晚上更RBAC使用实例。

此条目发表在php, php security分类目录,贴了, , 标签。将固定链接加入收藏夹。

有关网站后台密码防御问题》有 1 条评论

评论功能已关闭。