При тестировании сайтов или мобильных приложений иногда возникает необходимость не только отловить трафик между клиентом и сервером, но и модифицировать его, чтобы посмотреть, как это обработает бэкенд и что поменяется на UI.
В таких случаях можно использовать прокси-сервер Fiddler — промежуточное звено между клиентом (браузер, мобильное приложение и т. д.) и целевым сервером. Скорее всего, этот инструмент вам известен, но обычно говорят о нем вскользь. Мы по шагам разберем, как проверить с помощью Fiddler, что отобразится на UI при изменении запроса к серверу или возвращаемого ответа.
Предположим, есть сайт dataart.ru. На его главной странице выводится блок с будущими ивентами. Если никаких событий нет, то и секция, соответственно, не должна отображаться вместе с заголовком и вспомогательными иконками.
Но что делать, если контент есть, а проверить кейс с отсутствием будущих ивентов нужно? Один из вариантов — использовать Fiddler.
Итак, моделируем случай, когда на главной странице нет будущих ивентов:
1. Запускаем Fiddler. Чистим Web Sessions list слева.
2. Включаем Capturing в левом нижнем углу, чтобы отлавливать трафик.
3. Обновляем страницу dataart.ru в браузере и видим отправленные запросы в левой части окна Fiddler. Нас интересует запрос GET “/Umbraco/Api/Events/GetEventsForHomePage?tags=8”, который возвращает будущие события для нашей страницы. Если в ответе ничего не приходит, то блок с ивентами, заголовком и вспомогательными иконками не отображаются.
4. В этом случае можно модифицировать либо запрос перед отправкой на сервер, либо ответ на этот запрос перед тем, как его получит клиент.
В Fiddler это можно реализовать с помощью breakpoints. Вручную breakpoints могут задаваться через QuickExec консоль следующим образом:
bpu https://dataart.ru/Umbraco/Api/Events/GetEventsForHomePage?tags=8 — создаем breakpoint перед отправкой нужного запроса на сервер.
bpа https://dataart.ru/Umbraco/Api/Events/GetEventsForHomePage?tags=8 — создаем breakpoint перед возвращением ответа клиенту.
Давайте рассмотрим каждый вариант отдельно.
5. Чтобы изменить запрос перед отправкой на сервер, выполняем команду в QuickExec консоли: bpu https://dataart.ru/Umbraco/Api/Events/GetEventsForHomePage?tags=8
Обновляем в браузере страницу dataart.ru (в это время Capturing должен быть включен для Fiddler) и видим, что выполнение нужного нам запроса приостановлено. На это указывают иконка красного цвета напротив запроса в интерфейсе Fiddler и отсутствие блока с ивентами на самой веб-странице.
Что можно сделать на этом этапе? Изменить/добавить/удалить заголовки, куки, параметры запроса и т. д. Чтобы в ответе ничего не пришло, нам достаточно, например, во вкладке WebForms указать такое значение параметра tags, которое не должно вернуть никаких результатов.
После необходимых изменений запроса все, что остается сделать — кликнуть на Run to Completion и посмотреть на результат в браузере.
Важный момент: чтобы отключить breakpoints, нужно ввести в QuickExec консоль команды “bpu “ или “bpa“ без аргумента. Перед тем как перейти к рассмотрению следующего варианта, желательно убрать созданный breakpoint для запроса через “bpu “ соответственно.
6. Чтобы изменить ответ на запрос перед возвращением его клиенту, выполняем команду в QuickExec консоли: bpa https://dataart.ru/Umbraco/Api/Events/GetEventsForHomePage?tags=8
Обновляем в браузере страницу dataart.ru (в это время Capturing должен быть включен для Fiddler) и видим, что отправка клиенту нужного нам ответа приостановлена. На это указывают иконка красного цвета напротив запроса в интерфейсе Fiddler и отсутствие блока с ивентами на самой веб-странице.
Для нашей цели достаточно подменить тело ответа. Переходим во вкладку TextView и вместо всего содержимого вставляем ответ, который приходит в тех случаях, когда нет результатов — <«items»:[],«total»:0>. Но не забываем, что изменять можно разные данные (статус код, заголовки и т. д.).
Теперь все, что остается сделать — кликнуть на Run to Completion и посмотреть на результат в браузере.
Существуют и другие способы подключения breakpoints, об этом можно прочитать в небольшой статье Эрика Лоуренса, создателя Fiddler.
Обезьянка со скрипкой, или как я неожиданно сэкономил 790 рублей с помощью Fiddler
TL;DR: случайно нашёл простой способ купить платный сервис за 1 рубль вместо полной суммы. Сообщил об этом администраторам ресурса, в итоге получил год подписки бесплатно. Для прожжёных багхантеров – ничего интересного.
Давно хотел научиться уже наконец смотреть фильмы на английском в оригинале. С техническими вещами (лекции, курсы, семинары и т. п.) особых проблем у меня нет – но вот с художественными фильмами и даже играми беда-печаль.
А между тем качество перевода на русский зачастую оставляет желать лучшего. Вот, к примеру, несколько кадров из русской локализации Dead Space 3:
(выглядывая из-за угла в поисках противника) Looks clear.
Я – очень обязательный и целеустремлённый человек, поэтому минимум раз в год обещаю себе подтянуть английский. Правда, постоянно как-то так в жизни получается, что возникает огромное количество более срочных дел – родные, друзья, Skyrim — поэтому на английский времени не остаётся. Прямо заговор какой-то.
Не так давно у меня случилось очередное обострение, и я стал шерстить Сеть в поисках какого-нибудь подходящего сайта, обучающего английскому. Перебрал несколько вариантов; в итоге остановился на одном, который привлёк внимание интерфейсом и некоторыми заявленными возможностями. На одном из разделов сайта оказались сериалы на английском с весьма, на мой взгляд, удобно сделанными субтитрами — ну и прочими вкусными плюшками типа словаря и комментариев к сложным и тонким деталям языка.
После ознакомления с демо-версией происходящего было принято решение, что надо бы купить полный доступ ко всем сериям. Вдоволь поплакав над своими кровными денежками, я проследовал на страницу оплаты товара.
Слева выбираем продукты, справа появляется посчитанная цена. Потом нажимаем на «Оплатить картой», появляется окошко оплаты, оплачиваем. Всё стандартно.
И тут меня почему-то потянуло открыть Fiddler. Я много слышал про то, что умные люди с его помощью умеют встраивать XSS, списывать с мобильника деньги, красть учётки от контакта и взламывать Пентагон. У меня самого так никогда не получалось, но ведь рассказывают же!
Итак, я запустил Fiddler, нажал на кнопку «Оплатить» — и увидел вот такую картину:
Выделенный POST-запрос имел следующий вид:
Я с удивлением обнаружил, что там содержится до боли знакомая мне сумма моего заказа, которая приходит в ответе от сервера.
Известно, что Fiddler может перехватывать не только исходящие, но и входящие запросы. Я перевёл его в этот режим.
После этого я попробовал оплатить заказ ещё раз — и, когда сервер вернул мне ответ «1580 рублей», я ничтоже сумняшеся переменил его на несколько меньшую цену в 80 рублей:
Открывшееся окошко платёжной системы подтвердило, что заплатить нужно именно столько:
Насторожившись, я ввёл данные карты и скрестил пальцы…
Через несколько секунд окошко сообщило, что оплата успешно прошла.
«Ого! ★ », — подумал я и пошёл писать письмо администраторам ресурса. Отдельных способов связи для такого рода сообщений я не нашёл, поэтому просто написал в техподдержку.
Отправил обращение я около полуночи. К обеду следующего дня мне написал специалист техподдержки, поблагодарил за информацию и сообщил, что уязвимость закрыта. Я был приятно удивлён оперативностью ответа.
В качестве бонуса предложили доступ к любой из платных услуг сайта; я, разумеется, выбрал сериалы.
Теперь-то уж наверняка буду смотреть.
Буду рад услышать отзывы, советы и мнения читателей в комментариях. Также предлагаю поучаствовать в коротеньком опросе общественного мнения.
Когда попробовал проверить уязвимость после фикса – получил ошибку «Неверная операция» или что-то типа того. Но, видимо, я сделал слишком много запросов, потому что сейчас при подобных попытках (причём даже с разных IP-адресов) я уже пятый день вижу одно и то же сообщение «Повторите попытку позже».
Похоже, платёжная система меня таки забанила на некоторое время. 😀
Особо въедливые читатели могли заметить, что на скриншотах была указана сумма в 1580 рублей, а в заголовке статьи фигурирует 790.
Разгадка проста: изначально я планировал купить две услуги, но потом рассудил, что мне и одних сериалов за глаза хватит.
Ведь я – очень обязательный и целеустремлённый человек.
★ Здесь приводится официальная версия (сокращённая и отцензурированная).
Порой в процессе тестирования программного обеспечения QA-специалист должен отслеживать трафик между клиентом и сервером, проводить анализ и модификацию запросов.
Очень часто под подобные цели используется инструмент Fiddler– универсальный прокси, способный перехватывать HTTP(S) трафик и обеспечивать работу с ним.
Progress Telerik Fiddler
С его помощью можно инспектировать, проставлять контрольные точки, оперировать входящей и исходящей информацией. Зачастую тестировщики и разработчики используют его как своего рода промежуточное звено между конечным пользователем и целевым сервером. Запустив данный инструмент, можно понаблюдать, что именно происходит на веб-странице после перехода на нее.
В интерактивном окне запросов можно просматривать текущие запросы, анализировать их заголовки, выгружать на локальный диск (как все, так и по отдельности).
Визуальное представление работающего FIDDLER
При использовании данного ПО в области тестирования производительности, можно рассчитывать на эффективное выполнение следующих задач:
Пример выгрузки статистики
Также стоит выделить такую функцию Fiddler, как возможность отправки запросов (к примеру, для целей отладки серверного метода или его анализа).
К слову, чтобы правильно построить запрос, следует:
Если в процессе тестирования отображается много запросов, отследить необходимый очень сложно. Для этого в программе есть специальный фильтр, корректно настроив который можно отслеживать нужные вам запросы.
Выводы
В завершение можно отметить, что продукт Fiddler– очень полезная и необычная программа, с которой может справится исключительно опытный программист или тестировщик. Она будет отличным помощником при проведении эффективного нагрузочного тестирования, отладки программ, веб-сайтов и прочих веб-компонентов.
Я читал эту статью автора, лично считаю, что она довольно хорошая, очень подробная, но я не чувствую, что там много верстки, поэтому набираю вручную.
оглавление
Подробное руководство по артефакту Fiddler4
0x01 причина
В реальных проектах из-за частой отладки разработки, нестабильных интерфейсов и несвоевременного обновления документов интерфейса мы выбираем тестирование интерфейса, и многое другое нам необходимо самостоятельно фиксировать и анализировать интерфейс.
0x02 Почему выбирают Fiddler
A. Хотя Firebug может захватывать пакеты, он недостаточно мощный для анализа подробной информации HTTP-запросов. Функции имитации http-запросов недостаточно, а firebug часто требует «без обновления модификации». Если страница обновляется, все изменения не будут сохранены.
C. Httpwatch также является широко используемым инструментом захвата пакетов http, но поддерживает только браузеры IE и firefox (в других браузерах могут быть соответствующие плагины). Он кажется немного слабым для HTTP-запросов, которые хотят отлаживать браузер Chrome.
0x03 Как работает Fiddler
0x04 Базовый интерфейс Fiddler
Fiddler4, который я использую
По умолчанию наш Fiddler не включает поддержку https по умолчанию. Если интерфейс в проекте использует протокол https, эту функцию необходимо включить.
0x05 Встроенные команды и точки останова Fiddler
команда
Соответствующий запрос
Введение
пример
?
All
Строка, за которой следует вопросительный знак, может соответствовать запросам, содержащим эту строку.
?google
>
Body
Знак «больше», за которым следует число, может соответствовать размеру запроса. Запросы, превышающие это число
>1000
1. Меню «Файл»
Команды в меню «Файл» в основном поддерживают завершение запуска и остановки захвата веб-трафика через Fiddler, а также могут загружать или сохранять захваченный трафик. )
(2) New Viewer используется для открытия нового окна скрипта.
(3) Загрузить архив используется для перезагрузки трафика, ранее захваченного и сохраненного в формате файла SAZ.
(4) Параметр в подменю «Сохранить» поддерживает сохранение трафика в файл несколькими способами; этот параметр меню аналогичен параметру в контекстном меню в списке веб-сеансов.
(7) Команда меню «Выход» отменяет регистрацию Fiddler в качестве системного прокси и закрывает панель инструментов.
2. Меню «Правка»
Большинство команд в меню «Правка» должны действовать в текущем выбранном сеансе веб-сеанса, поэтому, если не выбран один или несколько сеансов, большинство команд недоступны.
(1) Несколько подменю в разделе «Поддержка копирования» копируют некоторую информацию о выбранном сеансе.
(2) Подменю в разделе Удалить соответственно поддерживают удаление всех, выбранных или невыбранных сеансов из списка веб-сеансов.
(3) Команда «Выбрать все» выделяет все содержимое списка сеансов.
(4) Команда «Вставить как сеанс» сгенерирует один или несколько смоделированных веб-сеансов на основе содержимого в буфере обмена.
(5) Подменю «Отметить» поддерживает выбор цвета для отметки сеанса, выбранного в списке веб-сеансов.
(6) Команда меню «Разблокировать для редактирования» разблокирует выбранный веб-сеанс и поддерживает все запросы и ответы на редактирование сеанса с помощью инспекторов.
3. Меню правил
(1) Триггер Hide Image Request определяет, отображать ли сеанс изображения в списке веб-сеансов.
(2) Триггер Hide CONNECTS управляет отображением сеанса с помощью метода запроса CONNECT в списке веб-сеансов.
(3) Подменю «Автоматические точки останова» определяет, будет ли Fiddler автоматически устанавливать точки останова: «До запросов» или «После ответов». Триггеры Ignore Image контролируют, действуют ли эти отключения электроэнергии на запросы изображений
(5) Если выбран пункт меню Require Proxy Authentication, все запросы, которые не отправляют заголовок запроса Proxy-Authorization, будут возвращать ответ HTTP / 407, требующий от клиента установки сертификата. Это правило можно использовать для тестирования клиентов HTTP, чтобы убедиться, что эти правила нормально работают на клиентских серверах с сертификатами.
(6) Если вы выберете пункт меню «Применить кодировку GZIP», если запрос содержит заголовок запроса Accept-Encoding с логотипом gzip, все ответы, кроме изображений, будут сжаты с использованием GZIP HTTP. Это правило используется для проверки того, действительно ли клиент, поддерживаемый параметром GZIP, сжимает содержимое. Эта опция также поддерживает настройку производительности и вычисляет количество байтов передаваемого потока сжатых данных.
(7) Если вы выберете «Удалить всю кодировку», кодировка содержимого HTTP и кодировка передачи всех запросов и ответов будут удалены.
(8) Параметр Hide 304s скроет все сеансы, содержащие ответы со статусом HTTP / 304 Not Modified.
(9) Параметр Request Japanese Content устанавливает или заменяет заголовок запроса Accept-Encoding для всех запросов логотипом ja, указывая, что клиент хочет, чтобы ответ был отправлен на японском языке.
(10) Подменю User-Agent поддерживает установку или замену всех запрошенных заголовков запроса User-Agent указанными значениями.
(11) Подменю производительности предоставляет простые параметры, которые влияют на производительность в Интернете:
4. Меню «Инструменты»
(3) Параметр Очистить кеш WinINET удалит все файлы в кеше WinINET, используемые в IE и других приложениях.
(4) Параметр «Очистить файлы cookie WinINET» удалит файлы cookie WinINET, отправленные в IE и другие приложения. Файлы cookie сеанса останутся неизменными.
(6) Параметр «Сравнить сеанс» действителен только при выборе двух сеансов в списке веб-сеансов.
5. Просмотр меню
(1) Показать панель инструментов определяет, отображается ли панель инструментов Fiddler.
(2) Три макета интерфейса: макет по умолчанию, макет с накоплением и широкий макет.
(3) Сверните в лоток или нажмите CTRL + M, чтобы свернуть Fiddler в системный лоток.
(4) Squish Session List контролирует, сжимается ли список веб-сеансов по горизонтали.
(5) Параметр списка сеансов AutoScroll определяет, будет ли Fiddler автоматически прокручиваться в конец списка сеансов при добавлении нового сеанса.
6. меню помощи
0x07 Панель быстрого доступа инструмента Fiddler
1. Проверьте порт компьютера.
2. Добавьте заметки.
Выберите адрес запроса, по которому нужно добавить примечания, нажмите вторую кнопку в левом верхнем углу, чтобы добавить примечания. После успешного добавления вы увидите примечание в столбце «Комментарии»
3. Кнопка воспроизведения (Ctrl + R)
Когда нам нужно снова отправить запрос, Fiddler предоставляет функцию воспроизведения для повторной отправки запроса.
4. Очистите панель мониторинга (Ctrl + X).
На панели можно узнать все или некоторые запросы.
5. Отладка ошибок.
Комбинируя кнопки в строке состояния, можно перехватить состояние запроса во время отладки.Стрелка в строке состояния выше указывает, что запрос перехватывается при отправке.
Стрелка в строке состояния указывает, когда Fiddler перехватил запрос и вернулся. Когда точка останова отпущена, можно использовать кнопку GO над автономным компьютером.
6. Переключение режимов
Два режима
Режим буферизации (режим буферизации) Fiddler не возвращает данные в приложение, пока не будет завершен ответ HTTP. Вы можете управлять ответом и изменять данные ответа. Но временная диаграмма иногда кажется ненормальной
Потоковый режим (Streaming Mode) Fiddler мгновенно вернет данные HTTP-ответа в приложение. Ближе к производительности реальных браузеров. Временная диаграмма более точна, но она не может контролировать реакцию.
7. Запрос на декомпрессию
Распакуйте HTTP-запрос для удобного чтения
8. Сохранение сеанса
По умолчанию Fiddler сохраняет все сеансы. Следует отметить, что чем больше состояния сеанса сохраняет Fiddler, тем больше занимает память.
9. Фильтровать запросы.
Эта функция может захватывать только запрос, отправленный определенным клиентом, нажмите «Любой процесс» и перетащите указатель мыши на указанного клиента.
10. Найдите
Общие инструменты имеют функции: выберите, какой цвет отображать, чтобы упростить просмотр соответствующего контента
11. Сохранение сеанса
Выберите запросы, для которых необходимо сохранить сеанс, нажмите «Сохранить», и вы сможете открыть его при просмотре в следующий раз.
На скриншоте также есть функция таймера.
13. Таймер
Функция синхронизации, щелкните правой кнопкой мыши, чтобы очистить
14. Быстро запустить браузер.
15. Очистить кеш
Функция очистки кеша браузера IE.
16. Кодирование / декодирование
Когда некоторые пути браузера закодированы, этот инструмент можно использовать для получения соответствующих декодированных путей, а также можно использовать другую текстовую информацию.
17. Разделение форм
0x08 Детали сеанса Filddler
1. Statistic
О производительности HTTP-запросов и другом анализе данных:
Мы можем увидеть некоторые базовые данные о производительности: например, время, необходимое для разрешения DNS, составляет 8 мс, время установления соединения TCP / IP составляет 8 мс и т. Д.
2. Inspectors
Для каждой части предоставляется множество различных форматов для просмотра содержимого каждого запроса и ответа. Формат JPG использует ImageView для просмотра изображений, HTML / JS / CSS использует TextView для просмотра содержимого ответа. Тег Raw может просматривать исходные заголовки HTTP-запроса и ответа. Для Auth вы можете просмотреть соответствующую информацию о прокси-авторизации и авторизации. На вкладке Cookies можно увидеть запрошенный файл cookie и информацию заголовка set-cookie ответа.
Может имитировать процесс отправки данных на сервер
Методы редактирования Parsed и Raw
(1) Анализ может быть выполнен после ввода запрошенного URL-адреса, или вы можете изменить соответствующую информацию заголовка (например, добавить часто используемые accept, host, referrer, cookie, cache-control и другие заголовки) После выполнения. Разделите запрос на 3 части: строка запроса, заголовок запроса, тело запроса, легко создать запрос. (2) Необработанный. Используйте информацию заголовка HTTP для создания HTTP-запроса. Как и в предыдущем случае, вам нужно вручную написать запрос построчно.
5. Filter
1. Включать ли фильтры. 2. Мы можем поддерживать несколько наборов фильтров и загружать разные фильтры в разных ситуациях. В Actions мы можем сохранить текущий фильтр или загрузить ранее сохраненный фильтр.
3. Фильтр на основе информации об имени хоста. В первом раскрывающемся списке отображаются только параметры внутренней или внешней сети.
На следующем рисунке показан пример, который можно просто понять как скрытие запроса к этому компьютеру.
5. По фильтру заголовка запроса. Показывать, только если URL-адрес содержит, и Скрывать, если URL-адрес содержит, используйте аналогичные методы и противоположные функции. Это фильтры, которые содержат определенные символы в URL-адресе, во многих случаях разделенные пробелами. Поддерживает регулярные выражения и точное соответствие. Ниже приведен пример, который можно просто понять как скрытие всех запросов js и css.
6. Эта часть представляет собой множество точек останова.Fiddler имеет функцию точки останова, которая может быть прервана при отправке запроса, а затем изменить запрос перед его отправкой. Конечно, его также можно прервать при ответе и внесении изменений. И скрипач также может имитировать ответ, вообще не отправляя его на сервер.На стадии разработки проекта это особенно полезно, если на сервере нет готового API или он используется для воспроизведения некоторых проблем.
7. Если код ответа на стороне сервера принадлежит или нет, скройте его.
9. Это флаг и модификация заголовка ответа. Это более полезно, если вы хотите знать, какие запросы изменили файлы cookie, тогда вы можете установить первый флажок
5.Timeline
6. Система скриптов Fiddler
Поместите этот скрипт в метод OnBeforeRequest (oSession: Session) и нажмите «Сохранить скрипт».
Таким образом, все сеансы cnblogs будут отображаться красным цветом.
7. log
0x09 Точка останова Fiddler и прокси
Есть два способа установить точки останова 1. Строка меню скрипта-> правила-> автоматические точки останова-> Выберите метод точки останова, установленная таким образом точка останова будет действовать для всех последующих HTTP-запросов.
Есть два местоположения точки останова: а. перед ответом. То есть после отправки запроса, но до передачи прокси-сервера Fiddler запрошенные данные могут быть изменены в это время. б. после ответа. То есть после ответа сервера, но до того, как Fiddler передаст ответ клиенту. Результат ответа можно изменить в это время.
2. Введите в командной строке. Bpafter xxx или bpv, bpu, bpm и т. Д. Устанавливают точки останова. Эта точка останова предназначена только для определенных типов запросов.
Установите точку останова после ответа (после точки останова ответа), которая может быть установлена через командную строку: bpafter localhost. После ввода ввода веб-сайт снова обращается к файлу, и вы можете видеть через интерфейс веб-сеанса Fiddler, что запрос завис, а веб-браузер загружается. Под панелью инспектора с правой стороны также появились новинки:
Переключитесь на вложенную панель textView, выберите часть, которую необходимо изменить, а затем нажмите «выполнить до завершения», чтобы отправить обратно измененный ответ. Предположим, наш измененный контент выглядит следующим образом:
Способы выхода из точек останова:
Нажмите «выполнить завершение» в интерфейсе инспектора, чтобы прервать точку останова этого HTTP-запроса.
Ввод команды go также приведет к тому, что текущий запрос пропустит точку останова.
Отключите точки останова в правилах-> автоматическая точка останова.
Хотя мы живем в сточной канаве, люди все еще смотрят на звезды!