В статье я хочу наглядно показать, как использовать abuse-тестирование (проверку на возможность злоупотреблений или недокументированного использования) софта, и примеры того, к чему это может привести. Это не четкая инструкция, как нужно делать, а скорее, пища для идей, которые потом уже будут реализованы на конкретном проекте.
Проект, на котором мне довелось использовать этот вид тестирования, из авиационной сферы. Его цель — онлайн-экзаменация сотрудников, которые участвуют в грузовых авиаперевозках. Проект состоит из двух частей-приложений:
Abuse-тестирование, конечно же, приходится только на студенческую часть, так как только у студента будет желание получить более высокие результаты на экзамене и как-то «считерить» при прохождении курса.
Я раньше не имел дела с таким видом тестирования, поэтому решил сначала определить наиболее критичные для подобного вида атак области. И уже потом применять к ним различные техники. Забегу вперед — кажется, идея оказалась хорошей.
Я выделил такие блоки приложения:
Ожидание: приложение корректно реагирует на попытку доступа к НЕ своему экзамену. Нет возможности просмотреть какие-либо детали, повлиять на тот или иной процесс чужого экзамена.
Как тестировать: тестирование в этом случае разбивается на две части. В первом случае мы проверяем валидацию на бэкенде, во втором — поведение на интерфейсе. Так как все действия совершаются через API, добавляем все API из пользовательского пути студента в любой REST-клиент и указываем во всех header «чужой» токен студента.
По той же логике проверяем доступ к экзамену из-под роли админа.
Тестирование на интерфейсе, по сути, заключается только в верификации ошибок, которые возникают при переходе по URL чужого экзамена или курса. Этот вид тестирования менее приоритетен, так как нам важнее убедиться, что у нас есть валидация на бэкенде, чем то, что увидит потенциальный читер.
Итоговое решение на проекте: реализована бэкенд-валидация, которая предотвращала любые действия под чужим токеном. В случае с контролем доступа это наиболее верное решение.
Ожидание: приложение скрывает кнопку входа в курс. Отсутствует возможность входа/редактирования/сдачи экзамена.
Как тестировать: здесь есть сразу несколько подходов, которые можно использовать для обхода этого бизнес-правила.
Итоговое решение на проекте: по любому экзамену хранится серверное время в базе, а также реализована бэкенд-валидация, которая предотвращает любые действия с экзаменом, если они происходят после заданного срока.
По согласованию с заказчиком — возможность с помощью читинга войти в «просроченный» экзамен и просмотреть некоторые его свойства. Верификация подобного решения проводится путем тестирования API по экзамену с истекшим сроком.
Интересный факт: дату и время доступности устанавливает админ, в своем часовом поясе. А шесть часов вечера у админа не равно шести часам вечера у студента в другой части земного шара. Так что надо обратить внимание, чтобы указанные дата и время хранились в UTC формате, а затем корректно переводились в часовую зону клиента.
В следующей части расскажу о тестировании остальных блоков приложения — и поделюсь своими выводами о том, зачем вообще нужно abuse-тестирование.
В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…
Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…
«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…
Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…
Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…
Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…