搜索
博主信息
博文 26
粉丝 0
评论 3
访问量 25060
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
密码安全的存储
无意苦争春的博客
原创
799人浏览过

竹子熊 2017.7.29

    在平常的项目中,对于管理员的密码是以明文进行存储的,这种方式在网站上线时,是极为不安全的.因为很多安全问题都是在极特殊的的情况下遇到的,具有隐蔽性,开发人员很难保证项目在使用过程中不会出现安全漏洞.当网站安全漏洞导致数据被泄漏时,管理人员往往无法在第一时间知道,一旦用户的密码遭到窃取,将造成难以挽回的损失.因此,在软件开发时对于密码存储的安全一定要慎重.

    接下来,将介绍我在某内容管理系统开发中加强密码存储的安全性,具体步骤如下.

(1)创建密码函数

    在对与密码进行加密时,通常会使用MD5()函数对密码进行摘要运算.MD5算法用于校验两个数据是否相同,通过MD5()函数运算后将得到一个由32位字符组成的字符串.不同的数据产生的MD5字符串不同.理论上,通过MD5生成的字符串无法逆向获得原来的数据.

    值得一提的是,由于MD5的广泛性,许多密码破解机构使用彩虹表技术运算并存储了海量字符串的MD5运算结果,导致对密码直接进行MD5运算已经无法应对安全需求,因此出现了许多混淆式的密码算法以提高破解难度.

   下面在common\function.php中添加函数,实现密码的加密,具体代码如下.

functrion password($password,$salt){
   return md5(md5($password).$salt);
}

     上述代码中,在对密码进行MD5运算是,会对密码的运算结果再连接$salt进行第2次MD5运算,从而防止一次MD5运算结果被轻易破解.另外,在对网站中的密码进行存储时,通常会为不同的用户生成不同的$salt,从而进一步加强密码的难度.

(2)修改管理员的数据表

    重新创建管理员的数据表,添加一个salt字段,并将密码字段修改为固定32位的长度.

CREATE TABLE `cms_admin`(
    `id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(10)  NOT NULL UNIQUE COMMENT'用户名',
    `passsword` CHAR(32) NOT NULL COMMENT`密码`,
    `salt` CHAR(6) NOT NULL COMMENT'密钥'
    )DEFAULT CHARSET=utf8;

在调整表结构后,重新添加管理员数据,对密码进行存储,具体如下.

INSERT INTO `cms_admin`(`id`,`name`,`password`,`salt`)VALUES(1,`admin`,MD5(CONCAT(MD5(`123456`),`itcAst`)),`itcAst`);

    上述SQL语句中,密码字段中的concat()用于连接两个字符串.此处的密码加密方式相当于前面编写的password()函数,其中salt可以随意设置,

(3)修改用户登录功能

    在完成数据表的修改后,接下来修改后台登录文件admin/login.php,在登陆时取出数据库中保存的密码和salt,然后对用户输入的密码按照调用函数password()函数进行运算,如果运算结果与数据库中保存的结果相同,则表示用户登录成功,具体代码如下.

   //根据用户名取出密码
$data=data_fetch(DB_ROW,'SELECT `id`,`name`,`password`,`salt` FROM `cms_admin` WHERE `name`=?','s',$name );
   //判断用户名和密码
if($data&&(password($password,$data['salt'])==$data['password'])){
  //登陆成功
  //.....
}

    至此,内容管理系统的密码安全存储功能开发完成.

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学