# Web Basic Модуль Занятие 1 ## Введение в Web-технологии ### Практическая работа 1 В этой работе установим Docker и загрузим контейнер, который будет использоваться в дальнейших работах. Также проверим работу контейнера и вместе с этим познакомимся с запросами к контейнеру 1. Установка Linux Ubuntu ![](https://i.imgur.com/bLXxQIt.png) 2. Установка Docker. Сначала сделаем обновление компонентов Linux ``` sudo apt update && sudo apt upgrade ``` Т.к. в репозиториях Ubuntu Docker может быть не самой свежей версии, будем обновляться из репозитория Docker. Для этого нужно будет добавить репозиторий в менеджер пакетов и загрузить ключ, использующийся для гарантирования установки рабочих программ. Сначала установим нужные пакеты для работы apt с ключами по HTTPS ``` sudo apt install apt-transport-https ca-certificates curl software-properties-common ``` ![](https://i.imgur.com/U3qFzQR.png) Далее загрузим ключ для репозитория Docker ``` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - ``` ![](https://i.imgur.com/CnHzdGg.png) Теперь добавим репозиторий Docker в список репозиториев apt ``` sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" ``` ![](https://i.imgur.com/kwotqh0.png) Проверим, что установка Docker будет происходить не из репозитория Ubuntu ``` apt-cache policy docker-ce ``` ![](https://i.imgur.com/xp6TCM5.png) Кандидаты для установки предоставляются репозиторием Docker Теперь можно сделать обновление с последующей установкой Docker ``` sudo apt update sudo apt install docker-ce ``` ![](https://i.imgur.com/Z9suHMq.png) ![](https://i.imgur.com/LcVYe21.png) Обычно после установки демон-сервис Docker запускается автоматически, удостоверимся в этом ``` sudo systemctl status docker ``` ![](https://i.imgur.com/I5MJjLb.png) Теперь нам нужно поставить web-приложение, которое используется для обучения специалиство по защите от атак на уровне Web (ссылка: https://hub.docker.com/r/bkimminich/juice-shop, на веб-странице будет команда, которую нужно использовать для установки приложения) ![](https://i.imgur.com/8AtLHYS.png) ![](https://i.imgur.com/epWljtp.png) Теперь запустим приложение ``` sudo docker run --rm -p 3000:3000 bkimminich/juice-shop ``` ![](https://i.imgur.com/W4EGuVB.png) После запуска мы можем обратится к запущенному приложению как из браузера внутри операционной системы (путь localhost:3000), так и в других системах, находящихся в той же сети, что и ubuntu (по IP-адресу linux-а) ![](https://i.imgur.com/4gcqVpk.png) 3. Изучение запросов к приложению Запросы к приложению от бразуера можем рассмотреть с помощью панели разработчика (в большинстве случаев открывается через нажатие F12). Во вкладке Network увидим список всех запросов, которые делает браузер для работы с приложением, запущенным в Docker (по большей части, это GET запросы на получение контента страницы) ![](https://i.imgur.com/yLvqF4m.png) Попробуем войти в приложение с какими-нибудь данными ![](https://i.imgur.com/PBQc6vU.png) В панели разработчика отразится POST запрос на отправку сообщений на сервер. Справа увидим ошибку 401 Unauthorized, что значит, что мы не прошли авторизацию на сервере ![](https://i.imgur.com/HLMaBEj.png) Отпроем вкладку Response и увидим чуть более развернутое представление о возникшей ошибке. 4. Запросы к серверу через curl Запросы к серверам можно отправлять не только с помощью бразуера, но также с помощью консольных утилит Отправим запросы с помощью curl в Linux ``` curl "http://localhost:3000" ``` ![](https://i.imgur.com/AYj89BY.png) Запрос, состоящий только из адреса сервера выдаст начальную страницу приложения Передача агрумента -I может быть использована для того, чтобы посмотреть, какие аргументы могут использоваться в запросах. ``` curl -I "http://localhost:3000" ``` ![](https://i.imgur.com/MXywbVd.png) Попробуем сформировать POST запрос на отправку ``` curl -X POST http://localhost:3000/rest/user/login -H 'Content-Type:application/json' -d '{"email":"any@mail.ru","password":"anyany"}' ``` * http://localhost:3000/rest/user/login - cюда отправлялся запрос в брузере, когда мы совершали вход в приложение * Content-Type:application/json - указывает вид, в котором мы отправляем запрос (json-формат) Если мы еще не регистрировались в приложении, то получим ошибку о неправильных данных для входа ![](https://i.imgur.com/z7kcd4M.png) С совершенной предрегистрацией получим JSON ответ с токеном аутентификации ![](https://i.imgur.com/G7LFHVa.png) 5. Запросы к серверу через PowerShell Совершим обращение через PowerShell Сначала узнаем IP-адрес Ubuntu ![](https://i.imgur.com/oARaQzC.png) Теперь мы знаем, по какому IP-адресу обращаться ``` wget -Uri 192.168.56.129:3000 ``` ![](https://i.imgur.com/78qEtKw.png) Получим стандартный ответ от сервера с начальной страницей приложения 6. Утилита JQ Теперь попробуем представить получаемый curl контент в более удобочитаемом виде. Для этого потребуется поставить утилиту jq ``` sudo apt install jq ``` ![](https://i.imgur.com/ZTXfn72.png) Если передадим вывод команды обращения в jq, получим гораздо более удобочитаемый вывод ![](https://i.imgur.com/Kkcs9Sz.png)