stanfy madcode meetup: Анализ и модификация http запросов для...
TRANSCRIPT
Stanfy MadCode Meetup:
Анализ и модификация HTTP запросов для тестирования мобильных приложений
Олег Никифоров QA @ Stanfy
План вебинара • Что такое снифферы, плюсы и минусы использования
• Why bother? или чем работа с трафиком может помочь?
• Client vs Cloud sniffers • HTTP - виды запросов и их структура • HTTP vs HTTPS • Виды ошибок • Работа со сниффером (на примере Burp Suite)
Что такое снифферы и для чего их применять
Сниффер - программа для перехвата и логирования трафика проходящего внутри сети.
При тестировании приложений, в том числе и мобильных, снифферы применяются для просмотра и подмены запросов-ответов между клиентом и сервером.
Минусы использования (на примере Burp Suite)
• Невозможность использовать сервисы по типу AppStore (свой сертификат)
• Если не выключить прокси когда выключен сниффер – запросы не будут работать (фон)
• Увеличивается время на операцию запрос – ответ
Плюсы использования
• Возможность эмулировать тайм-ауты соединения
• Возможность эмулировать серверные ошибки
• Возможность манипулировать данными как в запросе, так и в ответе
Why Bother?
• Как может помочь (positive) • Что можно проверять (negative)
Как может помочь (positive)
• подменить id пользователя/айтема в запросе чтобы получить другие данные в ответе
• изменить user status на лету: free/paid, approved/not approved
• подмена контента в запросе (значения параметров)
• подмена контента в ответе (значения параметров, ссылки на медиа файлы (фото, аудио, видео))
Что можно проверять (negative)
Вызов серверных ошибок для проверки их обработки на клиенте: • пустые required fields, • ошибочные данные, • неверный токен авторизации
Вызов ошибок в аппе путем подмены ответа от сервера: • пустые параметры в ответе, • невалидные значения (string вместо int и т.д.), • невалидная структура ответа
Client vs Cloud sniffers
• Burp suite (client): + много возможностей + гибкие настройки - условно бесплатный
• Runscope (cloud): + не надо включать прокси на всем девайсе + перехват по url + перехват без ведома пользователя ;) - бесплатный пакет сильно лимитирован в запросах - для вкл / выкл надо менять исходники приложения
Типы HTTP запросов (REST)
GET/POST/PUT/DELETE GET: • предназначен для запроса данных • query в url POST: • предназначен для отсылки данных • query в body
Структура запроса - Headers
Headers - параметры которые описывают клиент- серверное взаимодействие (кодировка, кэширование, тип контента, и т.д.): • Cookie / Auth Token / etc. – идентификатор сессии • User-Agent - описание девайса, ОС, версии аппа, etc. • Accept - ожидаемый нами формат контента (json, xml)
Кроме того, идентификатор сессии может быть вынесен в
уникальный параметр и передаваться в url
Структура запроса -‐ Body
Body -‐ тело запроса, содержит передаваемую нами инфу Тут будет перечень всех параметров которые мы
отсылаем на сервер в POST запросе, плюс любой загружаемый контент (изображение, аудио/видео файл)
Структура ответа
HTTP Status Code -‐ код и краткое сообщение, которые показывают статус взаимодействия (e.g. 200 OK)
Headers -‐ параметры которые описывают ответ (дата, тип контента, и т.д.): • Content-‐Type • Set-‐Cookie
Body -‐ тело ответа, содержит передаваемую нам инфу
HTTP vs HTTPS
HTTP Status codes
2** - успешный запрос
• 200 OK
3** - переопределение на другой url
• 304 Not Modified
4** - ошибка на клиенте
• 400 Bad Request
• 401 Unauthorized
5** - ошибка на сервере
• 500 Internal Server Error
Примеры ошибок
HTTP/1.1 200 OK Connection: Keep-Alive Content-Length: 112 Content-Type: application/json { "status" : "FAILURE", "message" : "Failure", "code" : 4, "description" : "Unidentified system error" }
HTTP/1.1 200 OK Connection: Keep-Alive Content-Length: 112 Content-Type: application/json { "action": "SomeAction", "resultCode": "0", "errorCode": "10", "errorString": "Duplicate confirmation code error", "queryString": null }
HTTP/1.1 403 Forbidden Date: Tue, 09 Dec 2014 09:48:08 GMT Content-Type: application/json;charset=utf-8 Content-Length: 30 {"fail":"Unauthorized Access"} HTTP/1.1 400 Bad Request Date: Tue, 09 Dec 2014 09:49:04 GMT Content-Type: application/json;charset=utf-8 Content-Length: 27 {"fail":"Invalid Argument"} HTTP/1.1 401 UNAUTHORIZED Server: nginx/1.7.7 Date: Tue, 09 Dec 2014 10:24:53 GMT Content-Type: text/html; charset=utf-8 Content-Length: 258 Set-Cookie: devicesession=.eJyrVorPTFGyqlZSSFKyUvJ1ycnxrQLCrFCDqNygbD8jv8zIXF8jIN8oyiWwIio; HttpOnly; Path=/ {"error": "The server could not verify that you are authorized to access the URL requested", "name": "Unauthorized"}
Party time Mindie - приложение для снятия и шаринга коротких видеороликов с наложением музыки и разных эффектов Почему Mindie? - Есть фид, есть новости, есть профиль