Блокировка учёток
Задание 1Введение
Цель: Реализовать блокировку после серии неудачных входов.
Напишите lockout_users(events, limit). events — список [user, ok] по времени. Успешный вход обнуляет счётчик неудач. Пользователь блокируется, когда неудач подряд стало limit, и дальше остаётся заблокированным. Верните отсортированный список заблокированных.
Задание 2Теория и инструменты
Блокировка замедляет подбор пароля. Счётчик считает неудачи подряд и обнуляется после успешного входа.
Минус — злоумышленник может заблокировать чужую учётку. Поэтому часто используют временную блокировку или капчу.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
lockout_users([["ann", false], ["ann", false], ["ann", false]], 3) → ["ann"]
lockout_users([["ann", false], ["ann", true], ["ann", false], ["ann", false]], 3) → []
Ещё 4 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Храните счётчик для каждого пользователя.
- 2Успех обнуляет счётчик, неудача увеличивает.
- 3Заблокированных пропускайте и верните их отсортированными.
Подсказки — каждая до решения стоит −25 очков
Задание 4Как защититься
Сочетайте блокировку с ограничением по IP, MFA и уведомлением пользователя.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.