[Перевод] Промокоды, случайно оставленные в исходном коде веб-сайта

vqwjpkekuisjqccuqm-udks138e.png

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

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

Мы исследуем сайт сети крытых аквапарков Great Wolf Lodge, однако должен сообщить, что веб-сайты довольно часто раскрывают свою внутреннюю информацию в плохом коде.

Я буду объяснять каждый свой шаг, чтобы вы могли сами использовать описанные в статье способы для исследования исходного кода других веб-сайтов. И поверьте мне, в исходном коде можно найти всевозможные любопытные подробности.
Вот что мы сделаем:

  1. Изучим исходный код Great Wolf, где найдём ссылки на промокоды, которые проверим.
  2. Попробуем использовать один из промокодов на веб-сайте и перехватим URL, передаваемый веб-браузеру.
  3. Спойлер: в конечном итоге, мы найдём работающий промокод.

Изучаем исходный код


Давайте начнём с того, что доберёмся до объекта изучения: Great Wolf. Нажмём правой клавишей мыши в любом месте веб-сайта и выберем «View source» («Просмотреть код»). Нажмём CTRL+F (или CMD+F) для поиска по коду и введём в поле поиска «promocode». Я нашёл две переменные, которые мне показались особо интересными: dealPromoCodeApiUrl и promoCodeList. Первая переменная содержит частичный URL, указывающий на файл JSON (файл с какими-то структурированными данными), в котором могут содержаться промо-коды. Вторая переменная — это массив (коллекция) промокодов.

Если взять URL, найденный в первой переменной, и добавить в его начало «greatwolf.com», то мы получим такой URL: https://www.greatwolf.com/content/experience-fragments/gwl/poconos/experience-fragment/master/_jcr_content/root/plan.json.
На момент написания статьи при переходе на этот URL меня приветствовали четыре разных промокода:

_8we8hnlhqkarwxb-kde4tw48lo.png

Данные, найденные на Great Wolf.

Если открыть URL в браузере, то данные могут и не выглядеть такими структурированными, как у меня. В некоторых браузерах есть встроенная функция просмотра JSON, но в большинстве её нет. Однако у каждого популярного десктопного браузера есть расширения, которые можно установить для более красивого отображения файлов JSON, поэтому достаточно перейти в магазин расширений/приложений своего браузера и поискать по запросу JSON.

Давайте запомним эти коды, а пока проверим ещё одну переменную: promoCodeList. Мы уже знаем её содержимое благодаря изучению исходного кода, но можно отобразить его удобнее с помощью консоли браузера. Откроем инструменты разработчика браузера, которые в большинстве браузеров под Windows открываются нажатием F12. Также в большинстве компьютеров и браузеров можно нажать правой кнопкой мыши в любом месте веб-сайта и выбрать что-то вроде «Inspect element» («Исследовать элемент»). Открыв инструменты разработчика, выберем «Console» («Консоль»). Затем мы можем ввести «promoCodeList» и нажать Enter, после чего увидим ещё пять промокодов:

gximqzqwtyuvhhr8hd2ssgzarj0.png

Давайте попробуем использовать один из них. В верхней части главной страницы Great Wolf есть опция поиска доступных дат. Я поискал даты, выбрал одного посетителя и ввёл обнаруженный ранее промокод: PROMO20.
q19ti4ttekt2g31bmxq7dulg9d4.png

После завершения поиска отобразился текст: «Unfortunately that is not a valid offer code. Please re-enter or view our other offers». («К сожалению, этот промокод недействителен. Введите код заново или изучите другие предложения.»)

Общаемся с веб-сервером


Мне всегда любопытно следить за тем, как данные перемещаются между браузером и веб-сервером, поэтому давайте перейдём во вкладку «Network» («Сеть») инструментов разработчика. Выберем «XHR», чтобы посмотреть, какие данные перемещаются между страницей и веб-сервером. Если вкладка пуста, обновите страницу. После этого вкладка сети заполнится вызовами API. Аббревиатуры наподобие XHR и API по сути означают, что веб-сайт общается с сервером.
krrmqtmv6kzsk94pvgtfwzb3t78.png

Сетевые вызовы Great Wolf.

Большинство из них не представляет особого интереса, но моё внимание привлекла выделенная строка. В ней написано «availability» («доступность») и похоже, что она отправляет интересные данные. Если нажать на неё, браузер покажет URL, который использует веб-сайт для запроса у сервера свободных номеров в отеле.

qd57ewpwmllardtiuq1yvehhi0m.png

Если нажать на URL, открытый в этой вкладке сети на момент написания, мы окажемся на ещё одной странице, заполненной данными. Результаты на этой странице содержат номера, которые свободны на выбранные даты. Удобно, что в начале данных есть информация, связанная с промокодом. Там указан код ошибки, сообщающей, что предложение недоступно (это мы и так знаем).
_trzs9jx1bukfomlpjssibrqzdy.png

Данные, найденные на Great Wolf.

К сожалению, эти данные не особо интересны, но URL упрощает проверку других промокодов. Если изучить URL, то можно увидеть часть «offerCode=PROMO20». Можно или ввести другой промокод, или перезагрузить URL, чтобы проверить его. Не долго думая, я начал их проверять. Один из найденных ранее промокодов сработал: «FLING40». На момент написания статьи можно было нажать сюда и получить такой отзыв:

bzt82tes8266mprsq6jogjefrsu.png

Данные, обнаруженные на Great Wolf.

И в самом деле, если вернуться на веб-сайт и ввести промокод, то можно убедиться, что он применён:

kxvk6k1-pj2nlzb_beqnpwpw3iq.png

Миссия выполнена.

Стоит также заметить, что некоторые из найденных нами ранее промокодов указаны прямым текстом на странице Deals сайта Great Wolf. Однако кода FLING40, который я использовал, там нет.

Подведём итог


Мы использовали очень простые методики, чтобы найти промокоды для веб-сайта бронирования номеров. Изучив исходный код, мы нашли несколько интересных переменных JavaScript. Мы проверили их и нашли несколько скрытых промокодов. Также мы обнаружили URL для общения с веб-сервером Great Wolf, позволивший быстрее тестировать коды. В конечном итоге, мы нашли сработавший скрытый промокод.

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

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

Как бы то ни было, надеюсь, вы узнали что-то новое. Удачной вам охоты на интересности в исходном коде других сайтов.


На правах рекламы


Эпично! Уже через минуту после заказа, вы можете получить облачный vps сервер на базе новейших процессоров AMD EPYC для размещения проектов любой сложности, от корпоративных сетей и игровых проектов до лендингов и VPN.

Подписывайтесь на наш чат в Telegram.

z9ptarc6sq-j36_r3iugpra4ojw.png

© Habrahabr.ru