Ответ
Тестирование аутентификации включает проверку всех механизмов, связанных с подтверждением личности пользователя. Основные методы:
1. Позитивное тестирование
- Проверка успешного входа с валидными учетными данными.
- Тестирование альтернативных методов (OAuth, токены, биометрия).
- Проверка "Запомнить меня" и восстановления сессии.
2. Негативное тестирование
- Вход с неверным паролем/логином.
- Попытки с пустыми, экстремально длинными или содержащими спецсимволы данными.
- Использование истекших, поддельных или отозванных токенов.
3. Тестирование защиты от атак
- Брутфорс: Проверка лимитов попыток, временной блокировки аккаунта или использования CAPTCHA.
- SQL-инъекции: Попытки обхода аутентификации через ввод
' OR '1'='1в поле логина. - XSS/CSRF: Проверка уязвимостей, которые могут скомпрометировать сессию.
4. Тестирование управления сессией
- Корректное завершение сессии при logout.
- Время жизни сессии и токенов.
- Защита от хищения сессии (secure/HttpOnly флаги у cookies).
Пример негативного теста на Python с requests:
import requests
def test_authentication_invalid_credentials():
auth_endpoint = "https://api.example.com/login"
payload = {"username": "wrong_user", "password": "12345"}
response = requests.post(auth_endpoint, json=payload)
# Ожидаем статус 401 (Unauthorized) и сообщение об ошибке
assert response.status_code == 401
assert "invalid" in response.json().get("message", "").lower()
# Проверяем, что токен или сессионная кука НЕ установлены
assert "session_id" not in response.cookies Ответ 18+ 🔞
А, ну это ж про то, как проверить, чтобы вся эта хрень с логином не развалилась и тебя не взломали какие-нибудь пидары с ботнетом. Слушай, тут целая наука, блядь, но если по-простому, то надо ломать свою же систему со всех сторон, пока она не скажет "иди нахуй, чувак".
Вот смотри, основные направления, куда надо тыкать палкой:
1. Когда всё по плану (позитив) Ну тут понятно, вводишь правильный логин-пароль — заходишь. Проверяешь, что все эти модные штуки работают: вход через гугл/фейсбук (этот ваш OAuth), "запомнить меня", восстановление пароля. Сессия после перезагрузки страницы не должна слетать, если ты её не убил.
2. Когда ты — распиздяй или злоумышленник (негатив) А вот тут начинается веселье, ёпта! Надо пробовать всё, что в голову взбредёт:
- Пароль "12345"? Отказ!
- Оставил поле пустым? Отказ!
- Вписал в логин строку длиной в овердохуища символов? Система не должна сдохнуть, а просто вежливо послать.
- А если подсунуть ей просроченный или левый токен? Должна понять, что это хуйня, а не ключ от квартиры.
3. Защита от реальных уёбков Тут уже боевые действия, блядь.
- Брутфорс: Представь, какой-то скрипт долбит твой логин паролями из словаря. Надо, чтобы после 5-10 попыток аккаунт временно блокировался или вылезала капча. Иначе — пиши пропало.
- SQL-инъекции: Классика жанра! В поле логина пишешь
' OR '1'='1и надеешься, что система, лохматая, пропустит. Если пропустила — всем разработчикам впендюрить по шапке, ибо позор. - XSS/CSRF: Это чтобы через какую-нибудь хитрожопую ссылку или скрипт не украли твою сессию. Куки должны быть защищёнными (secure, HttpOnly), иначе — манда с ушами.
4. Всё про сессии Залогинился — получил куку. Вышел (logout) — кука должна умереть, и к сессии больше не подступиться. Проверяй время жизни: через час неактивности — нахуй с тобой, перелогинься. И смотри, чтобы эту самую куку нельзя было стащить или подделать.
Вот тебе пример, как можно автоматически проверить, что с неправильным паролем не пускает:
import requests
def test_authentication_invalid_credentials():
auth_endpoint = "https://api.example.com/login"
payload = {"username": "wrong_user", "password": "12345"}
response = requests.post(auth_endpoint, json=payload)
# Ожидаем статус 401 (Unauthorized) и сообщение об ошибке
assert response.status_code == 401
assert "invalid" in response.json().get("message", "").lower()
# Проверяем, что токен или сессионная кука НЕ установлены
assert "session_id" not in response.cookies
Вот, смотри: шлём левые данные и ждём, что сервер ответит "401 — пошёл вон" и не даст никакой сессионной печеньки. Если даст — волнение ебать, дыра в безопасности!
Короче, смысл в том, чтобы быть самым ебучим пользователем и пытаться сломать всё, что можно. Если выдержит — молодцы. Если нет... ну, вы поняли, пиздец.