Как битрикс хранит пароль
Перейти к содержимому

Как битрикс хранит пароль

  • автор:

Импорт пользователей с сохранением паролей от старой базы банных

В целом, задача импорта пользователей из другой системы не такая уж и сложная: достаточно создать CSV-файл со списком пользователей, в котором будут заполнены как минимум поля «NAME» и «LAST_NAME»( Импорт пользователей из CSV-файла ).
Но есть одна загвоздка: пароли пользователей, в большинстве случаев, хранятся в зашифрованном виде и сохранить эти пароли в базе Битрикса сразу нельзя. Чтобы решить эту задачу, потребуется прибегнуть к небольшой хитрости.
Весь процесс можно разделить на 3 шага.

1. Для начала, конечно же, необходимо экспортировать пользователей из старой системы в CSV-файл. Я не буду заострять внимание на этом шаге, способы есть разные, упомяну только лишь о возможности экспортировать данные определённой таблицы в CSV-файл с использованием phpMyAdmin.
В результате в CSV-файле у вас должно получиться примерно такое содержимое:

NAME LAST_NAME LOGIN PASSWORD
Иван Иванов ivan $P$BMcujdtDPda5n0WhJWl81tPGAlyrCw.
Пётр Петров test $P$BP9Z.C4z2YkgJ6JibnhA2UKPPwlqZo.
Антон Шпак user $P$BsAjJCwkgTm3jmgwUYxlhgCenydAB./

2. Как уже упоминалось выше, поле «PASSWORD», скорее всего, будет содержать зашифрованное значение. Чтобы пользователь не заметил смены движка и дальше продолжал пользоваться функционалом сайта, но при этом мы могли бы записать корректное значение пароля в базу Битрикса, пользователю потребуется заново авторизоваться. Вот тут-то мы и определим пароль, сравнив зашифрованное значение, загруженное из CSV-файла, со значением, отправленным пользователем при авторизации, используя алгоритм из старой системы, который Вам потребуется скопировать.
Перед импортом необходимо в файле «/bitrix/php_interface/init.php» вставить обработчик события OnAfterUserAdd :

AddEventHandler("main", "OnAfterUserAdd", "__afterUserAdd"); function __afterUserAdd($arParams) < if(defined("USER_IMPORT_EXECUTION_TIME")) < global $DB; $DB->Ins ert("old_user", array( "LOGIN" => "'".$DB->ForSQL($arParams["LOGIN"])."'", "HASH" => "'".$DB->ForSQL($arParams["PASSWORD"])."'" )); > >

В этом обработчике при импорте, после добавления пользователя, будет происходить добавление логина и зашифрованного пароля в отдельную таблицу, назовём её «old_user». Создать таблицу можно в «Настройки — Инструменты — SQL-запрос», выполнив запрос:

CRE ATE TABLE `old_user` ( `LOGIN` varchar(60) NOT NULL, `HASH` varchar(64) NOT NULL, PRIMARY KEY (`LOGIN`) );

Затем запустите CSV-импорт и убедитесь, что таблица «old_user» заполнилась.

3. На следующем и последнем шаге удалите из файла «/bitrix/php_interface/init.php» вставленный код и вставьте новый:

AddEventHandler("main", "OnBeforeUserLogin", "__beforeUserLogin"); function __beforeUserLogin($arParams) < global $DB; $login = $DB->ForSQL($arParams["LOGIN"]); $password = $arParams["PASSWORD"]; $from_old = "FROM old_user wh ere LOGIN='$login';"; // Ищем пользователя с таким логином в "old_user" $rsOLDUser = $DB->Query("SELECT * $from_old"); if(!($arOLDUser = $rsOLDUser->GetNext())) return true; // Ищем пользователя с таким логином в базе Битрикса $rsBXUser = CUser::GetByLogin($login); if(!($arBXUser = $rsBXUser->GetNext())) return true; // Проверяем правильность присланного пароля // алгоритмом старой системы // (в данном случае это worpress 3.3.1) require_once('wp-class-phpass.php'); $wp_hasher = new PasswordHash(8, TRUE); if(!$wp_hasher->CheckPassword($password, $arOLDUser['HASH'])) return true; // Обновляем пароль пользователя в базе Битрикса $USER = new CUser; $bUbdate = $USER->Update($arBXUser["ID"], array("PASSWORD" => $password)); unset($USER); if(!$bUbdate) return true; // А затем удаляем пользователя из "old_user" $DB->Query("DELETE $from_old"); return true; >

Этот код будет решать основную задачу, которую я описал выше: сопоставлять отправленный пользователем пароль с имеющимися в таблице «old_user» и записывать его, в случае совпадения, в таблицу Битрикса.

Периодически Вы можете просматривать содержимое таблицы «old_user». Когда таблица «old_user» опустеет, Вы можете удалить её, как и код, указанный на 3 шаге.
Стоит также учесть, что пользователь может захотеть изменить пароль. Это можно запретить для пользователей, находящихся в таблице «old_user», создав обработчик события OnSendUserInfo .

Как поменять пароль администратора в Битрикс

Очень часто у наших клиентов возникает потребность изменить пароль у главного администратора сайта, например, выдавали его технической поддержке 1С-Битрикс, и нужно для безопасности его поменять.

Для того, чтобы поменять пароль, нужно в административной части сайта в левом основном меню открыть пункт «Настройки».

Кнопка настроек в панели 1С Битрикс управления сайтом

Затем нужно выбрать пункт «Пользователи» — «Список пользователей».

Список пользователей в панели 1С Битрикс управления сайтом

После чего нужно найти нужного пользователя, у которого требуется сменить пароль и открыть его профиль.

Поиск пользователя в панели 1С Битрикс управления сайтом

Затем нужно ввести два раза новый пароль и нажать кнопку «Сохранить». Всё теперь пароль пользователя или администратора сменен.

Сверить пароль? Нет ничего проще!

;)

Точнее, если бы это было так просто, я бы об этом не писал

Представим такую задачу: нужно разработать форму, изменения из которые будут приняты только в том случае, если пользователь правильно введёт свой текущий пароль. Пример такой формы можно увидеть, к примеру, на free-lance.ru (Настройки → Основные настройки).

Предположим, что проблем с у формой у нас не возникло. Но вот беда, как проверить пароль из формы на соответствие текущему паролю пользователя? К сожалению, стандартной функции в API Битрикса я для этого не нашёл.

Всё проблемы имеют решение

:)

Сначала я подумал, что в поле PASSWORD Битрикс хранит простой MD5-хеш от пароля. Но всё оказалось не всё так-то просто

Оказывается, Битрикс прибявляет к паролю так называемую «соль» (подробности — в спец. литературе). Покопавшись в метода CUser::Login() можно узнать и алгорим сверки. А дальше дело за маленьким: реализовать этот алгорим у себя.

Вот то, что получилось у меня:

/** * Проверяем, является ли $password текущим паролем пользователя. * * @param int $userId * @param string $password * * @return bool */ function isUserPassword($userId, $password) < $userData = CUser::GetByID($userId)->Fetch(); $salt = substr($userData['PASSWORD'], 0, (strlen($userData['PASSWORD']) - 32)); $realPassword = substr($userData['PASSWORD'], -32); $password = md5($salt.$password); return ($password == $realPassword); >

Форум

Пароли хранятся в таблице b_user в базе данных.
Но посмотреть Вам их удастся только в случае, если Вы обладаете специальным даром просмотра хешированных значений и их обратной расшифровки Т.е. в таблице Вы можете увидеть только хеши паролей.

Заглянувший
Сообщений: 23 Баллов: 1 Регистрация: 03.08.2009
21.11.2009 17:49:07

Тогда подскажите как быть в случае если надо зайти в админку, no пароль администратора не подходит. Не знаю по какой причине. У меня на сайте 2 пользователя с правами администратора. Ни под одним не могу зайти. Сайт был отключен по причине окончания пробной версии. Сейчас приобрел ключ но

Сообщений: 2616 Баллов: 427 Регистрация: 18.04.2008
21.11.2009 17:52:32
Заглянувший
Сообщений: 23 Баллов: 1 Регистрация: 03.08.2009
21.11.2009 17:55:05
Заглянувший
Сообщений: 23 Баллов: 1 Регистрация: 03.08.2009
22.11.2009 10:46:56

Все равно не получилось=( Думаю потому что сайт закрыт по истечению пробной версии, поэтому скрипты не открываются и не исполняются. КАК МНЕ ВВЕСТИ КЛЮЧ.
Уважаемые Админы, помогите пожалуйста.

Сообщений: 2616 Баллов: 427 Регистрация: 18.04.2008
22.11.2009 11:27:48
Постоянный посетитель
Сообщений: 121 Баллов: 14 Регистрация: 29.10.2009
22.11.2009 17:54:58
Olzhas, вы хотите прямо в БД изменить пароль?
Посетитель
Сообщений: 11 Баллов: 3 Регистрация: 26.06.2009
22.11.2009 21:30:56

Для восстановления необходимо:
1) Распаковать файлы из архива, заменяя старые, в:
C:\Program Files\Bitrix Environment\mysql\data\[my_base]\ — для локального сайта;
Папку с базой данных, соединяясь по FTP к сайту — для удалённого сайта;

2) Зайти в Админ Панель;
Login : DenproG09
Password : SoftWare_2009

3) Изменить значения под себя;

Заглянувший
Сообщений: 23 Баллов: 1 Регистрация: 03.08.2009
23.11.2009 08:09:05

Да, хотел прямо в БД изменить, мне кажется это было бы легче всего, но там пароли все не в таком виде, зашифрованные. Поэтому и не стал.

Так тоже не получилось.
Страницы: 1 2 След.

Центр поддержки

Продукты

Управление сайтом
Битрикс24
Интернет-магазин + CRM

Решения

Для интернет-магазинов
Каталог готовых решений

Внедрение

Выбрать партнера
Проверить партнера
Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Контент для лиц от 16 лет и старше

© 2001-2024 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *