Что делать, если забыл пароль от админки Битрикс?
Как восстановить доступ в админку Битрикс, если забыт пароль: готовый PHP-скрипт для сброса пароля через API CUser с отправкой на email.
Инструкция
Скачать готовый файл с Яндекс.Диск или скопировать исходник ниже
Открыть файл в редакторе кода и на строке 11 указать ваш секретный ключ, без которого скрипт не сработает!
Загрузить файл через FTP на сайт (крайне НЕ рекомендуется размещать файл в корне сайте)
Открыть файл в браузере с параметром в URL "?key=ВАШСЕКРЕТНЫЙКЛЮЧ"
После исполнения скрипта новый пароль будет отправлен на email, который указан у этого пользователя. На экран выведется email, куда отправлено письмо.
Удалить файл с сервера
Исходный код
<?php
/**
* Сброс пароля администратора
* @author https://t.me/bitrix_web
* @author https://code-culture.ru/
*/
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
define('USER_ID_FOR_CHANGE_PASSWORD', 1);
$key = 'Укажите_уникальный_рандомный_ключ_доступа_к_страницы'; //Например: tvhtjxucckfhoeun
if(filter_input(INPUT_GET, 'key') == $key){
$newPassword = \Bitrix\Main\Authentication\ApplicationPasswordTable::generatePassword();
$user = new CUser;
$user->Update(USER_ID_FOR_CHANGE_PASSWORD, ["PASSWORD" => $newPassword,"CONFIRM_PASSWORD" => $newPassword]);
$user::SendUserInfo(USER_ID_FOR_CHANGE_PASSWORD, SITE_ID, "Новый пароль для учетной записи с ID=".USER_ID_FOR_CHANGE_PASSWORD." - ".$newPassword);
echo 'Новый пароль отправлен на почту: '.$user->GetEmail();
}
Комментарии (4)
сделал по инструкции, скрипт отработал, но письмо не пришло - оказалось дело в том, что на сервере вообще не настроен sendmail/smtp, проверял через bitrix/admin/mail_event_view.php - там события висели в статусе N. так что если у кого молчок после echo с адресом, проверяйте очередь почтовых событий, а не сам скрипт
а если у меня несколько сайтов в мультисайтовости и юзер с ID=1 общий на всех - письмо на какой SITE_ID уйдет, если я в скрипте не трогала эту константу? просто интересно, шаблон уведомления берется от текущего сайта или дефолтного
вместо ApplicationPasswordTable::generatePassword() можно было бы взять просто random_bytes и bin2hex, чтобы не тащить лишнюю зависимость от этого класса, но в целом рабочий вариант, юзал на d7 без проблем
Полезно, но добавлю важный момент: файл этот реально нельзя оставлять после использования, даже на минуту. У знакомого был случай, что скрипт нашли через директорию-листинг за пару часов и потом чистили сайт от шелла. Плюс лучше сразу вписывать проверку IP или хотя бы basic auth на папку через .htaccess.