HyperText Transfer Protocol (HTTP)
Сегодня большинство приложений, которыми мы постоянно пользуемся, взаимодействуют с интернетом — как веб, так и мобильные приложения. Большинство интернет-взаимодействий осуществляется через веб-запросы по протоколу HTTP. HTTP — это протокол прикладного уровня, используемый для доступа к ресурсам
Всемирной паутины. Термин «гипертекст» обозначает текст, содержащий ссылки на другие ресурсы и текст, который читатели могут легко интерпретировать.
Коммуникация по протоколу HTTP включает в себя клиента и сервер, где клиент запрашивает у сервера определённый ресурс. Сервер обрабатывает запросы и возвращает запрашиваемый ресурс. По умолчанию для HTTP-коммуникации используется порт 80, хотя он может быть изменён на любой другой порт в зависимости от конфигурации веб-сервера. Те же запросы используются, когда мы посещаем различные веб-сайты в интернете. Мы вводим полное доменное имя (FQDN) в виде унифицированного указателя ресурса (URL), чтобы перейти на нужный веб-сайт, например:Коммуникация по протоколу HTTP включает в себя клиента и сервер, где клиент запрашивает у сервера определённый ресурс. Сервер обрабатывает запросы и возвращает запрашиваемый ресурс. По умолчанию для HTTP-коммуникации используется порт 80. Те же запросы используются, когда мы посещаем различные веб-сайты в интернете. Мы вводим полное доменное имя (FQDN) в виде унифицированного указателя ресурса (URL), чтобы перейти на нужный веб-сайт, например:
URL
Ресурсы по протоколу HTTP доступны через URL, который предоставляет гораздо больше спецификаций, чем просто указание веб-сайта, который мы хотим посетить. Рассмотрим структуру URL:
Scheme - Используется для определения протокола, к которому обращается клиент, и заканчивается двоеточием и двойной косой чертой
//).
User Info - Это необязательный компонент, который содержит учетные данные (разделенные двоеточием ":" ), используемые для аутентификации на хосте, и отделяется от хоста символом «собака» (@).
Host - Хост указывает на местоположение ресурса. Это может быть имя хоста или IP-адрес.
Port - Порт отделяется от хоста двоеточием ":" ). Если порт не указан, для схемы HTTP по умолчанию используется порт 80, а для HTTPS — порт 443.
Path - Указывает на ресурс, к которому осуществляется доступ, это может быть файл или папка. Если путь не указан, сервер возвращает индекс по умолчанию (например, index.html).
Query String - Строка запроса начинается с вопросительного знака (?) и состоит из параметра (например, login) и значения (например, true). Несколько параметров могут быть разделены амперсандом (&).
Fragments - Фрагменты обрабатываются браузерами на стороне клиента для определения местоположения разделов в основном ресурсе (например, заголовка или секции на странице).
Не все компоненты обязательны для доступа к ресурсу. Основные обязательные поля — это схема и хост, без которых запрос не будет иметь ресурса для обращения.
HTTP Flow
Приведенная выше диаграмма представляет анатомию HTTP-запроса на очень высоком уровне. Когда пользователь впервые вводит URL (inlanefreight.com) в браузер, тот отправляет запрос на сервер DNS (Domain Name System) для разрешения домена и получения его IP-адреса. Сервер DNS выполняет поиск IP-адреса для inlanefreight.com и возвращает его. Все доменные имена должны быть разрешены таким образом, поскольку сервер не может взаимодействовать без IP-адреса.
Примечание: Браузеры обычно сначала проверяют записи в локальном файле '/etc/hosts', и если запрашиваемый домен там отсутствует, они обращаются к другим DNS-серверам. Мы можем использовать файл '/etc/hosts' для ручного добавления записей для разрешения DNS, указав IP-адрес, за которым следует имя домена.
Как только браузер получает IP-адрес, связанный с запрашиваемым доменом, он отправляет GET-запрос на стандартный порт HTTP (например, 80), запрашивая корневой путь /. Затем веб-сервер получает запрос и обрабатывает его. По умолчанию серверы настроены на возврат индексного файла при получении запроса на /.
В данном случае содержимое файла index.html считывается и возвращается веб-сервером в виде HTTP-ответа. Ответ также содержит код состояния (например, 200 OK), который указывает, что запрос был успешно обработан. Затем веб-браузер отображает содержимое index.html и представляет его пользователю.
cURL
cURL (client URL) — это инструмент командной строки и библиотека, которая в первую очередь поддерживает HTTP, а также множество других протоколов. Это делает её отличным выбором для скриптов и автоматизации, что крайне важно для отправки различных типов веб-запросов из командной строки, необходимых для многих видов тестирования на проникновение веб-приложений.
Мы можем отправить базовый HTTP-запрос на любой URL, используя его в качестве аргумента для cURL, следующим образом:
Мы видим, что cURL не отображает HTML/JavaScript/CSS-код, как это делает веб-браузер,
а выводит его в необработанном виде. Однако, как специалисты по тестированию на проникновение,
нас в первую очередь интересует контекст запроса и ответа, что обычно оказывается гораздо быстрее
и удобнее, чем использование веб-браузера.
Мы также можем использовать cURL для загрузки страницы или файла и вывода содержимого в файл с помощью флага -O.
Если мы хотим задать имя выходного файла, мы можем использовать флаг -o и указать нужное имя.
В противном случае можно использовать -O, и cURL применит имя удалённого файла, как показано ниже:
Как мы видим, вывод в этот раз не был напечатан, а был сохранён в файл index.html.
Мы также заметили, что cURL всё же выводил некоторую служебную информацию во время обработки запроса.
Мы можем отключить этот вывод с помощью флага -s, как показано ниже:
На этот раз cURL ничего не напечатал, так как вывод был сохранён в файл index.html.
Наконец, мы можем использовать флаг -h, чтобы посмотреть, какие ещё параметры доступны в cURL:
Как упоминается в сообщении выше, мы можем использовать --help all, чтобы вывести более подробное справочное меню,
или --help category (например, -h http), чтобы получить детальную справку по конкретной категории флагов.
Если нам понадобится более подробная документация, мы можем воспользоваться командой man curl, чтобы просмотреть полную справочную страницу руководства cURL.
В следующих разделах мы рассмотрим большинство из перечисленных выше флагов и разберёмся, где и в каких случаях следует их использовать.
Сегодня большинство приложений, которыми мы постоянно пользуемся, взаимодействуют с интернетом — как веб, так и мобильные приложения. Большинство интернет-взаимодействий осуществляется через веб-запросы по протоколу HTTP. HTTP — это протокол прикладного уровня, используемый для доступа к ресурсам
Всемирной паутины. Термин «гипертекст» обозначает текст, содержащий ссылки на другие ресурсы и текст, который читатели могут легко интерпретировать.
Коммуникация по протоколу HTTP включает в себя клиента и сервер, где клиент запрашивает у сервера определённый ресурс. Сервер обрабатывает запросы и возвращает запрашиваемый ресурс. По умолчанию для HTTP-коммуникации используется порт 80, хотя он может быть изменён на любой другой порт в зависимости от конфигурации веб-сервера. Те же запросы используются, когда мы посещаем различные веб-сайты в интернете. Мы вводим полное доменное имя (FQDN) в виде унифицированного указателя ресурса (URL), чтобы перейти на нужный веб-сайт, например:Коммуникация по протоколу HTTP включает в себя клиента и сервер, где клиент запрашивает у сервера определённый ресурс. Сервер обрабатывает запросы и возвращает запрашиваемый ресурс. По умолчанию для HTTP-коммуникации используется порт 80. Те же запросы используются, когда мы посещаем различные веб-сайты в интернете. Мы вводим полное доменное имя (FQDN) в виде унифицированного указателя ресурса (URL), чтобы перейти на нужный веб-сайт, например:
URL
Ресурсы по протоколу HTTP доступны через URL, который предоставляет гораздо больше спецификаций, чем просто указание веб-сайта, который мы хотим посетить. Рассмотрим структуру URL:

Scheme - Используется для определения протокола, к которому обращается клиент, и заканчивается двоеточием и двойной косой чертой
User Info - Это необязательный компонент, который содержит учетные данные (разделенные двоеточием ":" ), используемые для аутентификации на хосте, и отделяется от хоста символом «собака» (@).
Host - Хост указывает на местоположение ресурса. Это может быть имя хоста или IP-адрес.
Port - Порт отделяется от хоста двоеточием ":" ). Если порт не указан, для схемы HTTP по умолчанию используется порт 80, а для HTTPS — порт 443.
Path - Указывает на ресурс, к которому осуществляется доступ, это может быть файл или папка. Если путь не указан, сервер возвращает индекс по умолчанию (например, index.html).
Query String - Строка запроса начинается с вопросительного знака (?) и состоит из параметра (например, login) и значения (например, true). Несколько параметров могут быть разделены амперсандом (&).
Fragments - Фрагменты обрабатываются браузерами на стороне клиента для определения местоположения разделов в основном ресурсе (например, заголовка или секции на странице).
Не все компоненты обязательны для доступа к ресурсу. Основные обязательные поля — это схема и хост, без которых запрос не будет иметь ресурса для обращения.
HTTP Flow

Приведенная выше диаграмма представляет анатомию HTTP-запроса на очень высоком уровне. Когда пользователь впервые вводит URL (inlanefreight.com) в браузер, тот отправляет запрос на сервер DNS (Domain Name System) для разрешения домена и получения его IP-адреса. Сервер DNS выполняет поиск IP-адреса для inlanefreight.com и возвращает его. Все доменные имена должны быть разрешены таким образом, поскольку сервер не может взаимодействовать без IP-адреса.
Примечание: Браузеры обычно сначала проверяют записи в локальном файле '/etc/hosts', и если запрашиваемый домен там отсутствует, они обращаются к другим DNS-серверам. Мы можем использовать файл '/etc/hosts' для ручного добавления записей для разрешения DNS, указав IP-адрес, за которым следует имя домена.
Как только браузер получает IP-адрес, связанный с запрашиваемым доменом, он отправляет GET-запрос на стандартный порт HTTP (например, 80), запрашивая корневой путь /. Затем веб-сервер получает запрос и обрабатывает его. По умолчанию серверы настроены на возврат индексного файла при получении запроса на /.
В данном случае содержимое файла index.html считывается и возвращается веб-сервером в виде HTTP-ответа. Ответ также содержит код состояния (например, 200 OK), который указывает, что запрос был успешно обработан. Затем веб-браузер отображает содержимое index.html и представляет его пользователю.
cURL
cURL (client URL) — это инструмент командной строки и библиотека, которая в первую очередь поддерживает HTTP, а также множество других протоколов. Это делает её отличным выбором для скриптов и автоматизации, что крайне важно для отправки различных типов веб-запросов из командной строки, необходимых для многих видов тестирования на проникновение веб-приложений.
Мы можем отправить базовый HTTP-запрос на любой URL, используя его в качестве аргумента для cURL, следующим образом:

Мы видим, что cURL не отображает HTML/JavaScript/CSS-код, как это делает веб-браузер,
а выводит его в необработанном виде. Однако, как специалисты по тестированию на проникновение,
нас в первую очередь интересует контекст запроса и ответа, что обычно оказывается гораздо быстрее
и удобнее, чем использование веб-браузера.
Мы также можем использовать cURL для загрузки страницы или файла и вывода содержимого в файл с помощью флага -O.
Если мы хотим задать имя выходного файла, мы можем использовать флаг -o и указать нужное имя.
В противном случае можно использовать -O, и cURL применит имя удалённого файла, как показано ниже:

Как мы видим, вывод в этот раз не был напечатан, а был сохранён в файл index.html.
Мы также заметили, что cURL всё же выводил некоторую служебную информацию во время обработки запроса.
Мы можем отключить этот вывод с помощью флага -s, как показано ниже:

На этот раз cURL ничего не напечатал, так как вывод был сохранён в файл index.html.
Наконец, мы можем использовать флаг -h, чтобы посмотреть, какие ещё параметры доступны в cURL:

Как упоминается в сообщении выше, мы можем использовать --help all, чтобы вывести более подробное справочное меню,
или --help category (например, -h http), чтобы получить детальную справку по конкретной категории флагов.
Если нам понадобится более подробная документация, мы можем воспользоваться командой man curl, чтобы просмотреть полную справочную страницу руководства cURL.
В следующих разделах мы рассмотрим большинство из перечисленных выше флагов и разберёмся, где и в каких случаях следует их использовать.
Последнее редактирование модератором: