Как стать автором
Обновить

Как я использовал Pytest для написания тестов, гарантированно обходящих двухфакторную аутентификацию

Время на прочтение10 мин
Количество просмотров4.7K
Всего голосов 12: ↑10 и ↓2+8
Комментарии3

Комментарии 3

Во втором релизе весь тест был разделен на юнит-тесты. Используя pytest, библиотеку Python, мы разработали юнит-тесты, чтобы выяснить, где именно ломается служба идентификации. Тесты должны были:

Определить, работает ли Slackbot, который помог нам обойти 2FA.

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

Проверить, правильно ли заполнена страница входа в систему, поскольку иногда команда UI/UX изменяет веб-компоненты, чтобы улучшить дизайн приложения или исправить ошибку, которая может нарушать работу службы идентификации. Например, если текстовое поле неправильно связано с именем пользователя или паролем, пользователь не сможет войти в систему.

Проверить, что Slackbot получает уведомление о необходимости кода аутентификации 2FA и извлекает код после получения уведомления.

Проверить, действителен ли код 2FA, полученный Slackbot.

Проверить, все ли профили на странице согласия разрешены.

Проверить, что после нажатия кнопки "разрешить" из url извлекается код, и подтвердить, что этот код был извлечен.

Получить токен доступа (access token) и рефреш токен (refresh token) через OAuth 2.0.

Сгенерировать новый токен доступа, который должен отличаться от предыдущих.


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

От названий вещей не своими именами ничего хорошего не происходит.

Я когда-то интересовался этим вопросом. Потому что у нас доступ к тестируемому приложению был через пароль и токен. Накопал, что есть библиотеки для OTP (ну там PyOTP, например). По смыслу она будет делать то же самое, что делает ваш Google Authenticator в телефоне. Мы в коде прописываем инициализационный шифр, который нам дает сервис (обычно это среди опций, "добавить вручную" вместо qr кода). И наш тестировочный код, будет тем же алгоритмом создавать нам коды доступа как это делает ваш Google Authenticator или кто-то еще. Реализацией не занимался, но ребята с другого проекта рассказывали, что этот подход рабочий.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий