Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[疑问] 关于ss的登录验证问题。拜求大侠帮忙~

[复制链接]
7ail 发表于 2010-4-27 17:37:29 | 显示全部楼层 |阅读模式
由于搭建了一个SS是依附在另外的一个员工网站下的,03+sql2000。
为了避免过多的账户,上头要求登录验证还是验证原来的账号密码。
可是密码的加密方式完全不一样。于是我将SS的验证绕了出来——把SS用户数据库里的密码置空或者设定了一个固定值。
然后在原来网站上写了一个WEB SERVICE,如果验证成功,就把SS里接受的密码设置成那个固定值。具体代码如下:
  1.                         $password = $_POST['password'];
  2.                         $username = $_POST['username'];
  3.                         /*$query = "http://www.xxxx.com/xxxx?name=".$username."&pwd=".$password;
  4.       //Outside Login
  5.       //Create the DOM Document object from the XML returned by the query
  6.       $xml = file_get_contents($query);
  7.       $dom = new DOMDocument;
  8.       $dom = DOMDocument::loadXML($xml);
  9.       $state = $dom->getElementsByTagName('STATE');
  10.       if($state->item(0)->nodeValue==1) $password="abc";
  11.       else $password ="";*/
  12.       
  13.                         dbconnect(1);
  14.                         if(empty($_SCONFIG['ucmode'])) {
  15.                                 $password = md5($password);
  16.                                 $query = $_SGLOBAL['db_bbs']->query('SELECT * FROM '.tname('members', 1).' WHERE username=\''.$username.'\' AND password=\''.$password.'\'');
  17.                         } else {
  18.                         $ucresult = uc_user_login($username, $password, $loginfield == 'uid');
  19.                                 list($members['uid'], $members['username'], $members['password'], $members['email']) = saddslashes($ucresult);
  20.                                 if($members['uid'] > 0) {
  21.                                         $query = $_SGLOBAL['db_bbs']->query('SELECT * FROM '.tname('members', 1).' WHERE uid=\''.$members['uid'].'\'');
  22.                                 } else {
  23.                                         messagebox('error', 'login_error', geturl('action/login'));
  24.                                 }
  25.                         }
  26.                         if($member = $_SGLOBAL['db_bbs']->fetch_array($query)) {
  27.                                 if(empty($_SCONFIG['noseccode']) || empty($_SCONFIG['ucmode']) && $member['secques']) {
  28.                                         $title = $blang['safety_questions'];
  29.                                         $guidearr = array();
  30.                                         include template('site_secques');
  31.                                         exit;
  32.                                 } else {
  33.                                         $msg = 'login_succeed';
  34.                                         if(!empty($_SCONFIG['ucmode'])) {
  35.                                                 $msg = $lang['login_succeed'].uc_user_synlogin($member['uid']);
  36.                                         }
  37.                                         dologin($member, $cookietime, $msg);
  38.                                         exit;
  39.                                 }
  40.                         }
复制代码
然后我将数据库里的用户密码都设置为了定值“abc”SS加密方式(论坛的members表以及SS的members表)。
但是在密码改为“abc”后,不用我新增的验证方式也无法通过验证(我把自己新增的验证注释掉了,仅用原来SS本身的验证)。只有管理员账户用初始密码可以进,别的后来导入的账户都无法用“abc”登陆。这是什么原因?是不是验证的数据库表不是members?还是它的验证机制有别的玄机?
据推断问题大致出现在这一句:
$ucresult = uc_user_login($username, $password, $loginfield == 'uid');
                                list($members['uid'], $members['username'], $members['password'], $members['email']) = saddslashes($ucresult);
                                if($members['uid'] > 0) {
                                        $query = $_SGLOBAL['db_bbs']->query('SELECT * FROM '.tname('members', 1).' WHERE uid=\''.$members['uid'].'\'');
                                } else {
                                        messagebox('error', 'login_error', geturl('action/login'));
                                }
我一直没有弄懂uc_user_login()这个函数的机制(我在函数的声明处看了,依然没有弄懂)望请高手指点。
 楼主| 7ail 发表于 2010-4-27 17:42:26 | 显示全部楼层
本帖最后由 7ail 于 2010-4-27 17:44 编辑

补充:
为了避免麻烦以及以后维护的困难,我没有修改原来的代码逻辑。只是希望通过简单的嵌入代码形式达到目标。
另望人指明SS与DISCUZ之间的数据联系,因为论坛是不需要的,所以想要禁掉论坛的功能,但怕数据上会造成一些错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 02:37 , Processed in 0.028183 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表