Модераторы: 2man
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пароли пользователей в IPB, где они хранятся и как формируются 
:(
    Опции темы
-=Ustas=-
Дата 27.10.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 3
Всего: 69



Мое почтение.
Вопрос в следующем. Делаю интеграцию комментариев с сайта в форум IPB 2.1.1, и необходимо сделать проверку на зарегистрированного юзера. Начал шерстить талицы - есть такая ...members, в ней есть поля legacy_password и member_login_key, первое не катит, т.к. у одних юзеров оно имеет хэш, а у других пустое. Мне нужно узнать, как происходит авторизация пользователя. Грешу на member_login_key, но там не понятно, как и из каких данных генерится этот хеш-ключ.
Может кто помнит - на вскидку. Если да, то просвятите.
Пасибки.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Darhazer
Дата 27.10.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 1
Всего: 29



А версия IPB какая?
Вот это для IPB 2.x:

Код

function dologin($name,$password,$adminlogin=0) {

  global $ibf_prefix,$ibf_cookieid,$ibf_login_method,$inadmin;

  if ($ibf_login_method == 'username') {

    $userinfo = query_first("SELECT
      ".$ibf_prefix."members.id,
      ".$ibf_prefix."members.member_login_key,
      ".$ibf_prefix."members.mgroup,
      ".$ibf_prefix."members.name,
      ".$ibf_prefix."members.email,
      ".$ibf_prefix."groups.g_view_board
      FROM ".$ibf_prefix."members
      LEFT JOIN ".$ibf_prefix."groups ON ".$ibf_prefix."members.mgroup = ".$ibf_prefix."groups.g_id
      WHERE ".$ibf_prefix."members.name = '" . mysql_escape_string($name) . "'");

    if ($userinfo) {

      if (!($converge = query_first("SELECT converge_id, converge_pass_hash, converge_pass_salt FROM " . $ibf_prefix . "members_converge WHERE converge_email = '" . $userinfo['email'] . "'"))) {
        unset($userinfo);
      }
    }

  } else {

    if ($converge = query_first("SELECT converge_id, converge_pass_hash, converge_pass_salt FROM " . $ibf_prefix . "members_converge WHERE converge_email = '" . mysql_escape_string($name) . "'")) {

      $userinfo = query_first("SELECT
        ".$ibf_prefix."members.id,
        ".$ibf_prefix."members.member_login_key,
        ".$ibf_prefix."members.mgroup,
        ".$ibf_prefix."members.name,
        ".$ibf_prefix."members.email,
        ".$ibf_prefix."groups.g_view_board
        FROM ".$ibf_prefix."members
        LEFT JOIN ".$ibf_prefix."groups ON ".$ibf_prefix."members.mgroup = ".$ibf_prefix."groups.g_id
        WHERE ".$ibf_prefix."members.id = " . intval($converge['converge_id']));

    }

  }

  if ($userinfo) {

    if ($converge['converge_pass_hash'] == md5(md5($converge['converge_pass_salt']) . md5($password))) {
      if ($userinfo[mgroup] == 1) {
        $error = "account_notmoderated";
      } elseif ($userinfo[g_view_board] == 0) {
        $error = "user_banned";
      } else {

        if (!$userinfo['member_login_key']) {

          $login_key = '';

          srand( (double)microtime() * 1000000 );

          for ($i = 0; $i < 60; $i ++) {

            $num = rand(33, 126);

            if ($num == '92') {
              $num = 93;
            }

            $login_key .= chr($num);
          }

          $userinfo['member_login_key'] = md5($login_key);

          query("UPDATE " . $ibf_prefix . "members SET member_login_key = '" . $userinfo['member_login_key'] . "' WHERE id = " . intval($userinfo['id']));

        }

        updatecookie($ibf_cookieid."member_id",$userinfo[id]);
        updatecookie($ibf_cookieid."pass_hash",$userinfo['member_login_key']);
        $error = "";
      }
    } else { // Password wrong
      $error = "wrong_password";
    }
  } else { // Username wrong
    $error = "wrong_username";
  }

  if (!empty($error) & $inadmin) {
    return false;
  } elseif (!empty($error) & !$inadmin) {
    standarderror($error);
  } else {
    return $userinfo[id];
  }

}


A это для 1.x
Код

function dologin($name,$password,$adminlogin=0) {

  global $ibf_prefix,$ibf_cookieid,$inadmin;

  $userinfo = query_first("SELECT
    ".$ibf_prefix."members.id,
    ".$ibf_prefix."members.mgroup,
    ".$ibf_prefix."members.name,
    ".$ibf_prefix."members.password,
    ".$ibf_prefix."groups.g_view_board
    FROM ".$ibf_prefix."members
    LEFT JOIN ".$ibf_prefix."groups ON ".$ibf_prefix."members.mgroup = ".$ibf_prefix."groups.g_id
    WHERE ".$ibf_prefix."members.name = '$name'");

  if ($userinfo) {

    if ($userinfo[password] == md5($password)) {
      if ($userinfo[mgroup] == 1) {
        $error = "account_notmoderated";
      } elseif ($userinfo[g_view_board] == 0) {
        $error = "user_banned";
      } else {
        updatecookie($ibf_cookieid."member_id",$userinfo[id]);
        updatecookie($ibf_cookieid."pass_hash",md5($password));
        $error = "";
      }
    } else { // Password wrong
      $error = "wrong_password";
    }
  } else { // Username wrong
    $error = "wrong_username";
  }

  if (!empty($error) & $inadmin) {
    return false;
  } elseif (!empty($error) & !$inadmin) {
    standarderror($error);
  } else {
    return $userinfo[id];
  }

}



--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
-=Ustas=-
Дата 27.10.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 3
Всего: 69



Чё то я совсем не втыкаюсь в этот код, точнее в код втыкаюсь, а логику нет. Да и на странице сайта не хочу инклюдить функции с форума, чтоб использовать данную функцию. Мне нужно просто проверить, зарегистрирован ли пользователь на форуме или нет. Есть варианты?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
-=Ustas=-
Дата 28.10.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 3
Всего: 69



Ну что, никто не незнает?! Господа Vingrad Developer-ы , вы же должны знать... Какие поля и из каких таблиц выбираются данные для формирования ключа авторизации?
Сразу хочу извиниться за наглость, просто ненавижу в чужом коде ковыряться, да и времени особо нет, а тут начальство взгрело сюрпризом smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Darhazer
Дата 28.10.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 1
Всего: 29



Привет,
Не надо злиться ;)

Код, который тебе показал взять из модуля подключения к Invision CMSа VirtuaNews. Проблем в том, что у Invision сложная система прав. Потому и так сложна ауторизация в 2.х

Ну, в 1.х все ясно - в members.password записань md5 хеш

А в 2.х... Насколько я понимаю, member_login_key это ключ сессии, можно и без него делать ауторизацию.
Обрати внимание на код:

Код
if ($converge['converge_pass_hash'] == md5(md5($converge['converge_pass_salt']) . md5($password))) {

Он делает проверку пароля... Но $converge нельзя взят от имя пользвателя, а только от email. Поэтому:

Код

 $userinfo = query_first("SELECT
      ".$ibf_prefix."members.id,
      ".$ibf_prefix."members.member_login_key,
      ".$ibf_prefix."members.mgroup,
      ".$ibf_prefix."members.name,
      ".$ibf_prefix."members.email,
      ".$ibf_prefix."groups.g_view_board
      FROM ".$ibf_prefix."members
      LEFT JOIN ".$ibf_prefix."groups ON ".$ibf_prefix."members.mgroup = ".$ibf_prefix."groups.g_id
      WHERE ".$ibf_prefix."members.name = '" . mysql_escape_string($name) . "'");
    if ($userinfo) {
      if (!($converge = query_first("SELECT converge_id, converge_pass_hash, converge_pass_salt FROM " . $ibf_prefix . "members_converge WHERE converge_email = '" . $userinfo['email'] . "'"))) {
        unset($userinfo);
      }
    }


Не обращяй внимание на query_first - можно вместо него прописать mysql_query() / mysql_fetch_array(); Оно это же и делает - выполняет запрос и возвращяет массив с первого результата

P.S. Проверку на converge можно делать по user id, не по email

Это сообщение отредактировал(а) Darhazer - 28.10.2005, 10:54


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
-=Ustas=-
Дата 28.10.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 3
Всего: 69



Darhazer, ай молодца!!!!!!! С удовольствием в репу тебе!
Наконец я допёр до этой системы smile
Смотри, что получилось, с твоей помощью:
Код

        $sql = "SELECT
                    ".FORUM_DB_PRFX."members.id,
                    ".FORUM_DB_PRFX."members.member_login_key,
                    ".FORUM_DB_PRFX."members.mgroup,
                    ".FORUM_DB_PRFX."members.name,
                    ".FORUM_DB_PRFX."members.email,
                    ".FORUM_DB_PRFX."groups.g_view_board
                FROM
                    ".FORUM_DB_PRFX."members
                LEFT JOIN
                    ".FORUM_DB_PRFX."groups
                ON
                    ".FORUM_DB_PRFX."members.mgroup = ".FORUM_DB_PRFX."groups.g_id
                WHERE
                    ".FORUM_DB_PRFX."members.name = '".mysql_escape_string($_POST['login'])."'";
        $res = mysql_query($sql);
        if (mysql_num_rows($res) == 0) {
            // Если такого юзера нет, то посылаем нах...
            // Header("location: ".$HostName."forum/index.php?act=Login&CODE=01&CookieDate=1");
            exit();
        } else {
            $info = mysql_fetch_object($res);
        }
        $sql = "SELECT
                    converge_id,
                    converge_pass_hash,
                    converge_pass_salt
                FROM
                    ".FORUM_DB_PRFX."members_converge
                WHERE
                    converge_email = '".$info->email."'";
        $res = mysql_query($sql);
        $converge = mysql_fetch_object($res);

        if ($converge->converge_pass_hash ==
            (md5(md5($converge->converge_pass_salt).md5($_POST['password'])))) {
            echo "Logined success!";
        } else {
            echo "Invalid user, replace and press any key!!!"; // :)
        }

Пасиб тебе человеческое! smile

Это сообщение отредактировал(а) -=Ustas=- - 28.10.2005, 11:43


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие движки / фрейморки | Следующая тема »


 




[ Время генерации скрипта: 0.2953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.