---
# System prepended metadata

title: Web Basic Модуль Занятие 1

---

# 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)





