关于discuz ucenter 在解密的时候 ,用uc_authcode或_authcode解不开
发布:smiling 来源: PHP粉丝网 添加日期:2015-09-30 11:10:37 浏览: 评论:0
关于discuz ucenter 在解密的时候,用uc_authcode或_authcode解不开密码.
吐槽:针对于discuz和ucenter这个东西,个人感觉太复杂,也太垃圾,现在好多网上去搜索的时候基本都是单点登陆,但是这个单点登陆局限性太大,所以我们要做双向登陆就会出现一些问题,下面说一下为何解不开密码.
问题1:为何找不到Example_auth这个cookie名称.
答:每个应用discuz ucenter的时候,都会生成_auth,而前面的Example的意思是说明,除非你自己定义cookie名称叫Example_auth,而当我们去输出cookie的时候,会找到这样的名称:****_auth,这里的星号代表是生成的信息,所以不用去管他,直接将****_auth对应的字符进行解密即可.
问题2:按照问题1中的所说还是解不开密码,返回是空的.
答:这是因为秘钥不对应导致的,这里说明一下,我们在根目录创建的config.inc.php里面有个全局变量UC_KEY这是个秘钥,但是当我们去网站根目录的bbs\config文件夹下面找到配置文件config_ucenter.php中海油一个UC_KEY,但是我们发现,都是UC_KEY但是实际值却不一样,根据他的命名 ,UC_KEY可以很明显的看出是ucenter的秘钥,但是却一样啊。所以说,discuz和ucenter很垃圾啊。
都吧我给搞晕了,这里先不管他,到底是什么key,暂时我们不动他就可以,然后我们找到根目录下的api/uc.php中的synlogin这个方法,然后我们可以看到这句话dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);这里我就不说是多少行了,代码都被我给弄乱了。我们追踪authcode这个方法,发现这个方法在根目录下的bbs\source\function\function_core.php这个文件里面。因为authcode这个字符串实际就是加密的cookie信息。
然后我们找到authcode这个方法,可以看到$key = md5($key != '' ? $key : getglobal('authkey'));实际上如果你仔细的话,可以看到authcode这个方法在调用的时候根本就没有变量,所以,这里的key是空的,所以使用了getglobal这个东西,但是这个getglobal返回过来的根本不是谁的key(UC和discuz的key都不是这个),呢我们就不管他,你可以使用bug测试,看看这个key到底是哪个秘钥,实际上就是这里出的问题,但是为了保证其不修改人家代码的原则,我们自己修改自己的代码即可。直接在uc.php中的synlogin()方法中添加即可,如下:
if(($member = getuserbyuid($uid, 1))) {
$key = "111111111111111111";//自己定义key,然后在解密的时候直接用这个key就可以了.
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE', $key) , $cookietime );}
我们在我们自己的页面获取cookie,代码如下:
- Yii::import('application.vendor.*');
- include_once 'ucenter.php';
- $model = new LoginForm;
- $key = "111111111111111111";//使用上面自己定义的key就可以了
- $mm = uc_authcode($_COOKIE['b7R7_2132_auth'], 'DECODE',$key); //phpfensi.com
- print_r($mm);
至于这里为何有包含的文件,这里我就不说了,在我的博客中有详细介绍yii与discuz双向登陆、注册、退出代码实例。然后我们这里用的uc_authcode方法,在根目录uc_client\client.php文件中。我们可以看出和authcode的代码基本一样,上面我们说过时UC_KEY不一致导致的,这里$key = md5($key ? $key : UC_KEY);可以看到还是有UC_KEY,然后我们去吧这句话替换成如下:
md5("这里是UC_kEY");如果你不知道是哪个KEY,你就自己试试,反正就2个UC_KEY,然后得到的结果就是分2段.
前面是用户密码,后面是用户id这里没有用户名,我们可以根据用户id获取对应的用户名即可。然后我们呢就可以随意操作了。
tips:博客中有关于yii与discuz互通的信息,以及yii与discuz之间通信的步骤代码都会详细记录,不懂的可以发消息给我,经过本人1周多的时间研究把这部分给弄出来了,在此,感谢我的文件mmm.txt呵呵,在测试代码追踪中,mmm.txt记录了我的追踪过程,mmm.txt经过删除,新生成不下上百遍。
Tags: discuz解密 uc_authcode _authcode
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)