Blogger Information
Blog 26
fans 0
comment 3
visits 20555
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
密码安全的存储
无意苦争春的博客
Original
635 people have browsed it

竹子熊 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'])){
  //登陆成功
  //.....
}

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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post