Discuz!NT官方社区

首页 » Discuz!NT开发与测试 » Discuz!NT整合 » 本版所谓“最好用的整合插件”Motion.DZ.DLL,不知道作者有意还是无意,故意留了后门(或者BUG)。
redebug - 2008-6-4 12:32:00
就是这个帖子  http://nt.discuz.net/showtopic-40975.html

下载了他的dll,我们来看看其中一个关键函数 登陆函数

public virtual bool Login(string username, string password, int expDays, bool inVisisble, string reFerer)
{
string Sql = String.Format("select top 1 tpp,ppp,pmsound,invisible,sigstatus,uid from [{1}users] where username='{0}'", username, Motion.DZ.Command.RC.Tableprefix);    ---------注释1           
System.Data.DataTable myDt = Motion.DZ.Command.DBC.vDataTable(Sql);
if (Object.Equals(myDt, null) || myDt.Rows.Count <= 0)
{
Motion.DZ.Command.Register(username, 0, String.Empty, password, 11, String.Empty);  ----注释2
myDt = Motion.DZ.Command.DBC.vDataTable(Sql);
}
GetUserInfo userinfo = new GetUserInfo(myDt);
if (Object.Equals(myDt, null) || myDt.Rows.Count <= 0) return false;

Motion.DZ.Command.DBC.vExecuteNonQuery(String.Format("UPDATE [{0}users] SET [lastvisit]=GetDate(), [lastip]='{2}' WHERE [username]='{1}'", Motion.DZ.Command.RC.Tableprefix, username, Motion.DZ.Command.RC.UserIP));

return Motion.DZ.Command.WriteLoginCookie(userinfo, inVisisble, reFerer, expDays, password);

}


注释1: 这里只是检测了 用户名是否存在,只要用户名存在,登陆是肯定可以成功的,也就是说不管你密码正确与否,登陆都可以成功。

注释2: 这里是最天才的,如果用户名不存在,怎么办?代码自动给你注册一个,密码就是你输入的密码。

其他的懒得多写了,使用这个dll的朋友,最好能仔细检查一下代码。
sun391 - 2008-7-14 19:27:00
1 因为密码是要写进COOKIE里的  密码不对自然也进不去论坛 

2 我也觉得比较 寒 :~
smdcn - 2008-7-16 15:47:00
密码写入Cookie,比对错误,在DZ上面显示还是未登录的。
其实代码公开就是给大家来找毛病的,orz。。
zjmotion - 2008-8-2 1:23:00
这完全是因为你没有理解这里面的逻辑。

第一点:你仔细看一下我的说明文档就知道了,如下:
string username = Request.Form["username"];
string password = Request.Form["password"];
//这里登陆到您自己的网站
//..............
//同步登陆
Motion.DZ.Command.Login(username, password);

看到没,在同步登陆前面有一句是

//这里登陆到您自己的网站
//..............                //这是重点

也就是说,你首先要检测登陆到你自己站的合法性,如果你自己站没有登陆成功,完全可以提前return。
既然你都登陆进了你的站,当然只需要从论坛里检测有没有这个用户就行了,难道还需用再检测密码吗?而且即使密码不对,论坛也是登陆不上的,这点上面都说到我就不多说了。

第二、网站和社区的整合在时间上可能不同步。比如你的网站先开,已经有一万个会员了,而你突然加进社区,那么,之前的一万个会员怎么加进社区?自己写程序吗?还是那句话,在登陆社区前你必须是要先在你自己网站数据库里作验证的,既然已经通过了你自己数据库的验证,这个用户完全就是合法的,若社区数据库里没有,自动建一个帐号也是合乎情理的。
toxxj - 2008-8-2 22:52:00
支持下先,我下载了,要用Reflector 看下先
benfeng - 2008-8-5 12:06:00
为什么不直接开源呢?
86823237 - 2008-8-10 0:13:00


引用:
原帖由 zjmotion 于 2008-8-2 1:23:00 发表
这完全是因为你没有理解这里面的逻辑。

第一点:你仔细看一下我的说明文档就知道了,如下:
string username = Request.Form["username"];
string password = Request.Form["password"];
//这里登陆到您自己的网站
//..............
//同步登陆
M

对,正解!
LZ估计理解代码逻辑
zjmotion - 2008-8-11 16:18:00
是开源的:
http://nt.discuz.net/showtopic-42430.html
smartwill - 2008-8-12 2:00:00
那登陆了论坛他修改了密码,那另外个表能更新吗?
1
查看完整版本: 本版所谓“最好用的整合插件”Motion.DZ.DLL,不知道作者有意还是无意,故意留了后门(或者BUG)。