Хак Единая регистрация с DLE 9.* + IP.Board 3.1.*

Тема в разделе "DLE", создана пользователем Rodin, 16 май 2011.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 10.0 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. Rodin

    Rodin

    Регистр.:
    27 апр 2007
    Сообщения:
    227
    Симпатии:
    166
    Установка:

    1)Открываем:

    Код:
    dle/engine/modules/reg
    Ищем:

    Код:
    require_once ENGINE_DIR . '/classes/parse.class.php';
    Добавить ниже:

    Код:
    $ipb_dle_lan[0] = "Данное имя уже используется на форуме.";
    $db_ipb_user = "пользователь";
    $db_ipb_password = "пароль";
    $db_ipb_namedb = "имя_базы";
    $db_ipb_local = "localhost";
    $db_ipb_error = 1; // 1 - показывать ошибки в соединении с бд форума, 0 - нет
    $db_prefix_ipb = "префикс_если_его_нету_оставить_пустым";
    $ipb = new db;
    $ipb->connect($db_ipb_user, $db_ipb_password, $db_ipb_namedb, $db_ipb_local, $db_ipb_error);
    Найти:

    Код:
    global $lang, $db, $banned_info, $relates_word;
    Заменить на:
    Код:
    global $lang, $db, $banned_info, $relates_word, $ipb, $ipb_dle_lan, $db_prefix_ipb;
    Найти:

    Код:
    $row = $db->super_query( "SELECT COUNT(*) as count FROM " . USERPREFIX . "_users WHERE email = '$email' OR LOWER(name) REGEXP '[[::]]' OR name = '$name'" );
    Добавить ниже:

    Код:
    $ipb_test_name = $ipb->super_query ("SELECT COUNT(*) as count FROM {$db_prefix_ipb}members where name = '".strtolower($name)."'");
    if ($ipb_test_name ['count'] > 0) $stop .= $ipb_dle_lan[0];
    Найти:

    Код:
    $db->query( "INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '" . $config['reg_group'] . "', '', '', '', '', '" . $_IP . "')" );
    Добавить ниже:

    Код:
    $ipb_dle = new ipb_dle;
    $salt = $ipb_dle->generate_password_salt(5);
    $salt = addslashes($salt);
    $ph = $ipb_dle->generate_compiled_passhash($salt, md5($_POST['password1']) );
    $insert_ipb = $ipb->insert_id(); //ид вставки
    $member_key = $ipb_dle->generate_auto_log_in_key();
    $key_expire = $member_key * 60 * 60 * 24;
    $ipb->query("INSERT INTO `{$db_prefix_ipb}members` (
    member_id,
    name,
    members_l_username,
    members_display_name,
    members_l_display_name,
    members_seo_name,
    member_login_key,
    member_login_key_expire,
    email,
    member_group_id,
    joined,
    ip_address,
    time_offset,
    allow_admin_mails,
    language,
    msg_show_notification,
    members_auto_dst,
    members_pass_hash,
    members_pass_salt
    )
    VALUES (
    0,
    '$name',
    '".strtolower($name)."',
    '$name',
    '".strtolower($name)."',
    '".strtolower($name)."',
    '".$ipb_dle->generate_auto_log_in_key()."',
    '$key_expire',
    '$email',
    '3',
    '".time()."',
    '$_IP',
    '3',
    '1',
    '1',
    '1',
    '0',
    '$ph',
    '$salt'
    )");
    $ipb_st = $ipb->super_query("select * from {$db_prefix_ipb}cache_store where cs_key = 'stats'");
    $st_arr = unserialize($ipb_st['cs_value']);
    $st_arr['mem_count']++;
    $st_arr['last_mem_name'] = $name;
    $st_arr['last_mem_id'] = $insert_ipb;
    $st_arr2 = serialize($st_arr);
    $ipb->query("UPDATE {$db_prefix_ipb}cache_store set cs_value = '$st_arr2' where cs_key = 'stats'");
    Найти:

    Код:
    ?>
    Вставить выше:

    Код:
    class ipb_dle
    {
    function generate_password_salt($len=5)
    {
    $salt = '';
    for ( $i = 0; $i generate_password_salt( $len );
    return md5($pass);
    }
    }
    2) Открываем:

    Код:
    dle/engine/ajax/registration.php
    Найти:

    Код:
    $db->query ("SELECT name FROM " . USERPREFIX . "_users WHERE LOWER(name) REGEXP '[[::]]' OR name = '$name'");
    if ($db->num_rows() > 0)
    {
    $stop .= $lang['reg_err_20'];
    }
    Добавить ниже:

    Код:
    $ipb_dle_lan[0] = "Данное имя уже используется на форуме.";
    $db_ipb_user = "пользователь";
    $db_ipb_password = "пароль";
    $db_ipb_namedb = "имя_базы";
    $db_ipb_local = "localhost";
    $db_ipb_error = 1; // 1 - показывать ошибки в соединении с бд форума, 0 - нет
    $db_prefix_ipb = "префикс_если_его_нету_оставить_пустым";
    $ipb = new db;
    $ipb->connect($db_ipb_user, $db_ipb_password, $db_ipb_namedb, $db_ipb_local, $db_ipb_error);
    $ipb_test_name = $ipb->super_query ("SELECT COUNT(*) as count FROM {$db_prefix_ipb}members where name = '".strtolower($name)."'");
    if ($ipb_test_name ['count'] > 0) $stop .= $ipb_dle_lan[0];
    Данный хак протестирован , работает единая регистрация только в одну сторону: Регистрируясь на сайте DLE вы автоматически регистрируетесь на форуме IP.Board
     
    t-pawel нравится это.
  2. troop3r

    troop3r Постоялец

    Регистр.:
    14 ноя 2009
    Сообщения:
    138
    Симпатии:
    22
    как разместить регистрацию на форуме ipb, чтобы проходила через dle?
     
  3. lift

    lift Читатель

    Заблокирован
    Регистр.:
    1 июл 2007
    Сообщения:
    2.226
    Симпатии:
    1.378
    А что мешает тупо реврайтом сделать редирект с одного урла регистрации на другой (с IPB на DLE)?
     
Статус темы:
Закрыта.