Политика паролей
Задание 1Введение
Цель: Реализовывать политику надёжных паролей и учитывать граничные случаи.
Напишите функцию password_strength(p), которая возвращает True, если пароль надёжный:
- длина не меньше 12 символов;
- есть строчная и заглавная буква, цифра и спецсимвол (любой символ, который не буква и не цифра);
- пароль (без учёта регистра) не содержит подстрок
password,qwerty,123456,admin.
Иначе — False.
Задание 2Теория и инструменты
Политика паролей — набор правил: минимальная длина, разные классы символов, запрет популярных слов.
Современные рекомендации (NIST SP 800-63B) ставят длину выше «сложности» и советуют проверять пароль по базам утечек. Здесь мы реализуем классический вариант, чтобы потренировать работу со строками.
Инструменты
- Python:
str.islower(),isupper(),isdigit(),isalnum(),any(...) - JS: регулярные выражения,
toLowerCase()
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
password_strength("Tr0ub4dor\u00263xyz")
→ truepassword_strength("short1!A")
→ falseЕщё 13 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Сначала проверьте длину: меньше 12 — сразу
False. - 2Приведите пароль к нижнему регистру и проверьте, нет ли в нём запрещённых подстрок.
- 3Проверьте четыре класса символов через
any(...). Спецсимвол — любой символ, который не буква и не цифра. - 4Учтите, что пробел тоже считается спецсимволом, а кириллические буквы — буквами.
- 5Прогоните примеры из условия локально и только потом отправляйте.
Подсказки — каждая до решения стоит −10 очков
Задание 4Как защититься
Храните пароли через bcrypt/argon2, ограничивайте число попыток входа и включайте двухфакторную аутентификацию.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.