Перейти к содержимому

Защита входа - перебор паролей, картинка с кодом, второй фактор

Закрываем форму входа от перебора: ограничиваем попытки, показываем картинку с кодом и смотрим, кто и откуда стучится в административную часть.

Решение

Смотрим текущие настройки защиты:

printf("попыток до картинки=%s\n", COption::GetOptionString('main', 'captcha_login_attempts', '0'));
printf("блокировка записи=%s\n", COption::GetOptionString('main', 'block_login_attempts', '0'));
printf("длина пароля=%s\n", COption::GetOptionString('main', 'password_length', '6'));
// нулевые значения означают, что защита выключена

Нулевые значения настроек означают полностью выключенную защиту. Форма входа без ограничений принимает попытки бесконечно, и подбор простого пароля на такой форме - вопрос нескольких часов, а не месяцев.

Включаем ограничение попыток и картинку:

COption::SetOptionString('main', 'captcha_login_attempts', '3'); // после трёх неудач
COption::SetOptionString('main', 'block_login_attempts', '10'); // блокировка записи
COption::SetOptionString('main', 'block_time', '30'); // на полчаса
COption::SetOptionString('main', 'password_length', '8'); // минимальная длина
// значения подбирают под аудиторию: у магазина и у портала они разные

Картинка с кодом отсекает простой перебор, блокировка записи - настойчивый. Значения подбирают так, чтобы обычный человек, забывший пароль, не встретил блокировку с первой опечатки.

Смотрим журнал попыток входа:

$res = CEventLog::GetList(['ID' => 'DESC'],
['AUDIT_TYPE_ID' => ['USER_LOGIN', 'USER_LOGIN_FAILED', 'USER_AUTHORIZE']]);
while ($row = $res->Fetch()) {
printf("%s %-20s адрес=%s %s\n",
$row['TIMESTAMP_X'], $row['AUDIT_TYPE_ID'], $row['REMOTE_ADDR'], $row['DESCRIPTION']);
}

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

Закрываем административную часть по адресу:

location ^~ /bitrix/admin/ {
allow 203.0.113.0/24; # адреса офиса
deny all; # остальным даже форма входа не показывается
}
# то же правило пригодится для точки обмена и служебных адресов

Ограничение по адресу снимает вопрос перебора целиком: форма входа просто не отдаётся посторонним. Способ подходит там, где администраторы работают с известных адресов, и не подходит для магазина с покупателями.

Второй фактор для администраторов стоит включать всегда и без всяких исключений. Пароль утекает вместе с чужой базой паролей, а одноразовый код из приложения - нет, и это самая дешёвая защита из всех перечисленных.

Правила паролей стоит объявлять покупателям заранее. Форма, отвергающая пароль без объяснения требований, отправляет часть посетителей закрывать вкладку вместо регистрации.

Единый вход через внешнего поставщика личности переносит защиту туда. Тогда правила паролей и второй фактор настраиваются в одном месте, а не на каждом сайте компании отдельно.

Типичные проблемы

Пароли подбирают, а сайт молчит.

Ограничение попыток и блокировка выключены в настройках ядра сайта. По умолчанию форма входа принимает попытки практически бесконечно.

Покупатели жалуются на картинку с кодом.

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

Блокировка не срабатывает.

Сайт видит адрес посредника вместо адреса самого гостя. Счёт попыток идёт по адресу, а он оказывается у всех посетителей одинаковым.

В журнале нет неудачных попыток.

Протоколирование событий входа выключено в настройках. Журнал пишется только по включённым типам событий.

Администратор заблокировал сам себя.

Порог блокировки слишком низкий, а пароль набирался по памяти. Разблокировку в таком случае делают через базу или скриптом.

Частые вопросы

Помогает ли смена адреса административного раздела?

Немного и ненадолго: адрес узнаётся по косвенным признакам. Ограничение по адресу и второй фактор надёжнее.

Как разблокировать учётную запись?

Снять признак блокировки у записи или дождаться окончания срока. Из интерфейса это делает другой администратор.

Нужен ли второй фактор покупателям?

Обычно нет: он снижает число заказов. Для административной части и менеджеров - обязателен.

Что делать при постоянном переборе с разных адресов?

Закрывать административную часть по адресу и подключать защиту на уровне сервера. Настройками ядра распределённый перебор не лечится.

Смежное

Первоисточник