DISCUZ——后台管理密码ko方案

来源:互联网 发布:java spliterator 编辑:程序博客网 时间:2024/06/04 18:43

一、Discuz!的管理员(用户)密码存在哪里?

 

要想修改或找回密码,我们要明白他的密码存在哪里。自从UCenter诞生以来,所有要通过它实现数据同步的产品(如:Discuz!UCHome,SS等等),用户信息都存在了UCenter的数据库里的_members表中,而非产品自身的数据库里。拿DZ来说,在DZ的数据库中同样有_members表(pre_ucenter_members),同样会有密码字段,但实际上,存在DZ数据库里的密码是一组随机产生的数字,经过MD5加密后存入的。在注册时用户输入的密码及相关信息都是通过UC的接口 uc_user_register 传递到UCenter下进行操作的。 同样,在用户登录的时候也是通过UC提供的接口来传递数据的,经过UC的处理级验证,将信息返回给应用端(Discuz!)。

PS:1、register.php 注册处理文件。大约在206行处调用了uc_user_register 接口,注册成功返回用户的uid。
2、uc_user_register 接口函数是在文件 uc_client/client.php 文件下定义的。

 

二、修改密码

先来了解一下加密方式。如下代码(UC下module/user.php 大约在107行处):
$salt = substr(uniqid(rand()), -6);
$password = md5(md5($password).$salt);

$salt是一个根据当时的时间戳产生的一个不重复的随机码(uniqid函数),并用substr进行截取的字符串,这就是数据库中 _members表里'salt'字段存的值。
加密的过程就是先将用户的密码md5加密,再与生成的$salt字符串拼接,最后再用一次md5加密才能生成存在UC下,真正的用户密码。

了解到此,对于修改管理员(用户)密码应该有了一个大概的思路。所以,接下来就是修改密码的时刻。
1、在服务器上新建一个 PHP 脚本文件。
2、复制UC数据库里 _members 表里admin记录的'salt'值赋值给变量$salt。
3、定义$password变量,赋值为新密码。

4、将使用$password = md5(md5($password).$salt);再次加密后的值,覆盖原来password的值即可。

0 0