Продукт Без Тестирования

Привет всем, друзья.

Маленькая детективная история вам в ленту.

Не так давно я погуглил и наткнулся в Интернете на интересный проект. Правда, этот проект оказался интересным не по идее или функционалу, а по процессу разработки.

Проект находится в разработке уже больше года, все это время над проектом работают программисты, в рекламу вложены деньги.

У проекта даже есть несколько десятков активных пользователей.

Этот проект привлек мой интерес тем, что он не подвергался никакому функциональному тестированию.

В этой статье я хочу поговорить о том, каковы последствия отказа от тестирования продукта.

Думаю материал будет полезен тем, кто начинает работать над стартапом; люди, занимающиеся организацией проектов, чтобы не допустить ошибок при выборе команды разработчиков и методов работы над проектом; и всем тем, кому интересно узнать, как проект смог просуществовать больше года и как рядовой пользователь может потерять деньги просто потому, что мы часто доверяем сайтам, подозревая их только в мошенничестве, не думая, что сайт может просто быть плохо спроектирован.

Сразу стоит оговориться: я не имею никакого отношения ни к проекту, ни к людям из проекта.

Перед написанием статьи я связался с генеральным директором проекта и предложил ему обсудить ошибки, которые мне удалось найти, а также пути решения этих проблем.



о проекте

УПД: Поскольку данная статья не содержит рекламной информации, здесь и далее я удалил любые ссылки на конкретную платформу.

Хотелось бы еще раз обратить ваше внимание на то, что, прежде всего, цель этой статьи — показать на примере, что происходит с проектом, когда его не тестируют. Сам проект не так интересен, как то, как он разрабатывался.

Ребята копируют одну довольно известную биржу игровых ценностей, делая ставку на меньшие проценты комиссии проекта (по состоянию на 19 июня 2021 года комиссия проекта составляет 0%, однако, как выяснилось позже, платит до сих пор обычный пользователь) комиссия за оплату как при оплате товара, так и при выводе средств с платформы).



Продукт без тестирования

Проект существует на рынке около 6 месяцев; В общем чате платформы каждые 6 часов появляется объявление о продаже того или иного товара.

На платформе около 500 товаров (в среднем по 5 товаров на игру).

Разработкой занимались несколько команд в разное время.

Только последняя команда разрабатывала проект больше года.

Большую часть проекта создала последняя команда из 7 человек, которая позже сократилась до 4 человек.

Стоит отметить, что, по словам разработчиков проекта, тестирование не проводилось из-за невозможности договориться с основателем.

Команда разработчиков работала на внештатной основе, то есть блок за блоком.

При этом основатель был категорически против финансирования тестирования проекта, считая это пустой тратой времени.

P.S. Прежде чем писать статью, я набрал в поиске на GitHub {UPD: Название компании } — таким образом я связался с разработчиком проекта (ник на GitHub совпадал с ником в Telegram).

Через него я уже получил остальных ребят. Вся информация, представленная выше, — из уст разработчиков или основателя проекта.



Продукт без тестирования

Мне удалось связаться с основателем проекта через сайт биржи.

Получил контакты, оставив отзыв.



Продукт без тестирования



Мы проводим собственное тестирование.

Начало пути

Думаю, пришло время перейти к самому сладкому.

В начале я просто зарегистрировался на сайте, поковырялся в функционале и уже заметил интересный момент. В чате на главной странице отображаются только первые 20-25 сообщений, со забавным ограничением против флуда - нужно подождать 5 секунд, прежде чем написать сообщение в чат. Чат работает на веб-сокетах.

Лезем в консоль и получаем всю необходимую информацию для скрипта флуда чата.



Продукт без тестирования



Продукт без тестирования

Из консоли узнаем URL-адрес и формат сообщения.

Поскольку вся наша защита — это 5-секундное ожидание, все, что нам нужно сделать, это установить таймер в скрипте на 5 секунд. Даже если у вас под рукой есть ноутбук, вы легко справитесь с задачей по заполнению чата.

Что делать с блокировкой пользователя админами? Думаю, мы вернемся к этому позже.



Продукт без тестирования

Таким образом, какой-нибудь злоумышленник или конкурент может испортить первое впечатление пользователей о платформе.



Я искал медь и нашел золото

Давайте двигаться дальше.

Тестируя продукт, стоит проверять и абсурдные идеи: разработчики часто упускают из виду такие простые моменты.

Особенно когда разработка идет без тестирования.

Я решил проверить, есть ли документация в открытом доступе.

Из этой же консоли вытаскиваем первый попавшийся url, к которому сайт делает запрос https://transaction .

{UPD: URL платформы} 1.ру.

Проверяем на нем путь по умолчанию — /swagger-ui/ (я также проверял /swagger-ui/index.html, /swagger-ui.html, /api-docs и с добавлением /v{digit}/).

И вдруг мы натыкаемся на золотую жилу.



Продукт без тестирования

Таким образом, мы находим документацию по следующим сервисам:

  • Сервис, отвечающий за оплату товаров и вывод средств с платформы https://transaction .

    {UPD: URL платформы} 1.ru/swagger-ui/

  • Сервис, отвечающий за хранение информации об играх и продуктах на сайте.

    https://game .

    {UPD: URL платформы} 1.ru/swagger-ui.html

  • Сервис, отвечающий за регистрацию и авторизацию пользователей (в том числе администраторов).

    https://auth .

    {UPD: URL платформы} 1.ru/v3/api-docs

  • Сервис, отвечающий за хранение конфиденциальной информации пользователей.

    https://profilerus .

    {UPD: URL платформы} 1.ru/swagger-ui/index.html

  • То же, что и выше https://profile .

    {UPD: URL платформы} 1.ru/swagger-ui/index.html

  • Сервис, отвечающий за хранение сообщений на портале https://chat .

    {UPD: URL платформы} 1.ru/v3/api-docs

Нам не удалось найти документацию для следующих служб: https://proxy .

{UPD: URL платформы} 1.ru/, https://online .

{UPD: URL платформы} 1.ru/ .

Я не думаю, что это большая потеря.

Хочу отметить, что документацией я практически не пользовался: большую часть информации можно взять из консоли разработчика, изучая запросы, которые отправляет сайт.

Изучаем документацию

Из документации сервиса авторизации мы узнаем, что при регистрации нового пользователя не происходит проверка капчи (она есть на сайте).



Продукт без тестирования

Получаем простое дополнение к скриптам генерации нового пользователя при блокировке старого.



Давайте посмотрим на наполнение сайта

Я не копал глубоко в документации.

В доке товаров находим способ добавить в игру неограниченное количество товаров.



Продукт без тестирования

Токен JWT используется в качестве авторизации, которую мы получаем из любого запроса, отправляемого сайтом.

Мы пишем простой скрипт на Python, чтобы проверить, есть ли какие-либо ограничения на количество продуктов на одного пользователя.

Запускаем, ждем пару минут и убеждаемся, что кому-то легко залить систему.



Продукт без тестирования

Из этой же документации мы получаем запрос на получение всех игр на платформе — и теперь добавляем товары во все игры, во все категории.

Мы можем сделать это и на нашем ноутбуке.



Продукт без тестирования

Все, что мы делали раньше, было весело.

Злоумышленник, воспользовавшись этим, может сделать использование системы невозможным.

Флудить чат и товары; в случае бана создайте новый аккаунт. Для этого вам даже не обязательно находиться рядом с ноутбуком – все может произойти автоматически.

Но это пока не подвергает опасности рядового пользователя.



Давайте рассмотрим систему работы с финансами

Перейдем к системе оплаты товаров и вывода средств.

Как удобно, когда все разбито на логические блоки :) Заходим в консоль разработчика.

Проследив запросы, мы получаем примерную логику работы системы: при оплате делается запрос на бэк, на бэке создается новая транзакция, на которую генерируется ссылка на оплату (оплата происходит через стороннюю эквайринг, в ссылке указывается id объекта транзакции).

И замечаем интересную вещь — при повторном запросе на создание транзакции создается новая транзакция, но старая не удаляется.

Скорее всего, это делалось на случай, если человек перешёл по 2 ссылкам и оплатил более раннюю — эквайринг должен уведомить, по какой транзакции была произведена оплата.

Зачем каждый раз создавать новую транзакцию, понять сложно; возможно есть возможность изменить некоторые параметры транзакции (количество приобретаемых товаров и т.п.

).



Продукт без тестирования

Интересно отметить, что когда вы переходите на страницы «Транзакции», «Учетная запись продавца» и саму страницу транзакции, транзакция загружается.

И, соответственно, если создать для пользователя транзакцию на пару гигабайт, страница будет загружаться очень медленно.



Продукт без тестирования

Из этого делаем вывод, что простой Python-скрипт может испортить возможность оплаты товара.

Из одной и той же открытой документации мы берем запросы на все товары и по каждому товару делаем запрос на оплату огромное количество раз, чтобы создать большое количество транзакций.



Продукт без тестирования



Продукт без тестирования

Устанавливаем асинхронку, ставим все это на VDS и ждем.

Вы можете проверить объем загруженной информации непосредственно на странице «Транзакции».

После того как запрос стал весить около 150 МБ, с сервера стало приходить 500 МБ на запрос на получение транзакций.

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



Продукт без тестирования



Продукт без тестирования

Еще 150 Мб данных на пользователя - и вывод средств перестал работать - та же 500-я ошибка.

Я думаю, эти операции учитываются при расчете суммы денег на счету.

Таким образом, если загрузить в систему 300 МБ данных по каждому товару, злоумышленник может помешать всем продавцам вывести средства со своих счетов, а всем остальным пользователям — что-либо купить.



Несколько личных советов, как это исправить

  1. Наймите в штат полноценного тестировщика.

    Когда в вашем API есть такие баги, а документация находится в открытом доступе, это даже не звоночек, а целый звоночек.

    Я потратил около 3 часов на просмотр системы и написание скриптов.

    + еще одна ночь для проверки гипотезы с сущностью транзакции (я просто оставил ноутбук спамить).

    Я думаю, что в системе еще много недостатков, которые никто не смог обнаружить;

  2. Чтобы избавиться от возможности затопления, установите более серьезные ограничения;
  3. Пересмотреть алгоритм работы с финансами и убрать загрузку ненужной информации на страницах;
  4. Провести аудит безопасности;
  5. Чаще прислушивайтесь к советам команды.



выводы

Тестирование важно.

Если вы начинаете развивать стартап или какой-то проект на фрилансе, не поленитесь и выделите для тестирования отдельного человека.

Если вы являетесь основателем ИТ-проекта, то при подборе команды для проекта обязательно убедитесь, что в команде есть человек, ответственный за тестирование системы.

В этой статье я рассмотрел платформу лишь поверхностно.

Я не проводил полное тестирование системы или аудит безопасности.

Вполне возможно, что в системе есть более серьезные уязвимости.

P.S. В этой статье я никого не призываю заниматься черным взломом и использовать обнаруженные вами или кем-либо еще уязвимости в корыстных целях.

Я верю, что можно зарабатывать деньги, помогая Теги: #Разработка стартапа #Сетевые технологии #тестирование #Тестирование веб-сервисов #тестирование IT-систем #интересный проект

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.