吾知网

标题: discuz的cookie加密法 [打印本页]

作者: jekeyhui99    时间: 2015-10-23 09:09
标题: discuz的cookie加密法
一:Discuz!登陆验证Cookie机制分析
在构建登录验证的过程中,发现管理员管理的便捷与系统安全隐患之间的矛盾.全站采用cookie验证,比如wordpress的验证就是基于cookie的,由于cookie的明文传输,在局域网内极易被截获,或者这个vita在我不发骚的情况下存在了XSS漏洞的话,cookie被人截获,在这种情况下,等于站点被人xxoo了;另一种情况就是利用session来进行管理员身份的认证,但是由于php天生对于session的处理机制的问题,不能长时间保存,利用数据库构建的session系统开销太大,在这种情况下,我就只好先研究先下大家是怎么做的,于是分析了Discuz!的登陆验证机制.每个Discuz!论坛都有一个特定的authkey也就是Discuz!程序中的$_DCACHE[’settings’][’authkey’]并且与用户的浏览器特征值HTTP_USER_AGENT一起组成了discuz_auth_key这个变量如下代码:
commone.inc.php文件大概130行左右
PHP代码

在Discuz!论坛用户登陆以后会有一个cookie,名称为cdb_auth(cdb_是你站点的名称,可以设置不能在config.inc.php文件中设置),Discuz!论坛就靠这个来判断一个用户是否是登陆状态,在分析这个值的内容之前,我们看下他是如何生成的

PHP代码

解释一下,获得的客户端的cookie经过Discuz!的函数authcode解密以后会得到用户输入的用户名,密码,在authcode函数中会用到刚刚提到的$discuz_auth_key这个值,在不知道$discuz_auth_key的情况下,基本上靠cookie里的值反解出用户名密码的几率为0,同样的,在生成cdb_auth就是相逆的一个流程,先获得用户输入的用户名,密码,在验证正确之后,用authcode加密,写入cookie,很简单吧.
以上就是Discuz!普通用户的登陆验证过程,写的不是很详细,大概能看明白就行.

二:DISCUZ COOKIE

很多人都在用discuz 并会因为种种的需要结合discuz做各种系统.
对此,discuz提供了通行证 可有时候使用通行证不一定适用 就比如说那一段很长很长的url吧 看着就让人心烦
有什么解决方法捏?为了社区朋友们以后方便开发 这几天呕心沥血 肝肠寸断 孜孜不倦 终于让偶给想出了一个比较天才的想法
:hoho 那就是生成一个discuz 验证cookie
废话说完了 开始正题:
开始之前 咱先了解一下discuz的登陆机制  
先来一个简单的form

XML/HTML代码

OK,一个很实用的登录框已经完成。。。
下面 说下php方面的 我们假设改文件和discuz同一目录里
看代码
i_login.php

PHP代码

好 一个简单的登陆验证就完成了  
如果你不想加载common.inc.php文件的话 你需要提取
authcode 和dsetcookie函数 都比较简单哈  
OK 我们继续说下discuz验证部分 没兴趣的可以跳过去
验证部分 在common.inc.php 大约119行 开始

PHP代码

三:Discuz 用户信息加密算法-authcode加密/解密函数详解

Discuz论坛是国内广泛使用的开源论坛,论坛的安全体系构筑严谨,尤其是对用户信息加密的部分。
    用户信息包括用户名、密码、所属组别等,这些信息经过加密并保存在Cookie里面 ,服务器端读取Cookie信息,并解迷。
    作为对比,国内另一个基于Perl的论坛-----雷傲BBS,早期版本中,用户名以明文形式保存在Cookie里,密码经过一次md5加密后保存在Cookie里。这样,万一论坛存在跨站漏洞,或其他方式导致管理员密码信息泄露,会对论坛构成威胁。
    用户信息的加密解密都是在一个函数中实现的,函数定义为:
PHP代码







欢迎光临 吾知网 (http://www.5g99.com/bbs/) Powered by Discuz! X3.2