Какие методы тестирования аутентификации в веб-приложениях вы знаете?

Ответ

Тестирование аутентификации включает проверку всех механизмов, связанных с подтверждением личности пользователя. Основные методы:

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 — пошёл вон" и не даст никакой сессионной печеньки. Если даст — волнение ебать, дыра в безопасности!

Короче, смысл в том, чтобы быть самым ебучим пользователем и пытаться сломать всё, что можно. Если выдержит — молодцы. Если нет... ну, вы поняли, пиздец.