# Web. Практическая работа №1
## Цель работы:
- Познакомиться с основами WEB технологий
- Иметь представления об основных WEB протоколах
- Научиться разворачивать WEB-сервер с помщью docker
- Научиться создавать запросы к WEB приложению
## Задание Практической работы:
1) Установить и настроить **linux ubuntu 20.04**

2) Настроить подключение к репозиториям **docker**
Пакет установки Docker,из репозиториия Ubuntu, может содержать не самую последнюю версию. Чтобы использовать самую актуальную версию, надо устанавливать Docker из официального репозитория Docker. Для этого мы добавим новый источник пакета, ключ GPG от Docker, чтобы гарантировать загрузку рабочих файлов, а затем установим пакет.


Обратите внимание, что docker-ce не установлен, но является кандидатом на установку из репозитория Docker для Ubuntu (версия focal).
3) Установить **Docker CE**
`sudo apt install docker-ce` - установка
`sudo systemctl status docker` - проверяем статус после установки.

4) Установить веб-приложение [https://hub.docker.com/r/bkimminich/juice-shop](https://hub.docker.com/r/bkimminich/juice-shop)
Чтобы установить приложение нужно выполнить две команды
`docker pull bkimminich/juice-shop`
`docker run --rm -p 3000:3000 bkimminich/juice-shop`
Но можно обойтись только последней командой. Докер сам подгрузит не найденный образ.

Результат

5) Изучить запросы браузера к приложению и форме регистрации пользователей.
Рассотрим три HTML запроса браузера к приложению:
- главная страница
- страница с товаром
- форма регистрации
**Главная страница:**

Использован метод GET
`GET /#/ HTTP/1.1`
Соединение осталось не закрытым.
`Connection: keep-alive`
В куках сохранился язык приложения и то, что я закрыл два всплывающих баннера.
`Cookie: language=en; `
`welcomebanner_status=dismiss;` `cookieconsent_status=dismiss`
Рассматривать небезопасные URL как безопасные
`Upgrade-Insecure-Requests: 1`
Если изменен после даты, то отправить ответ с кодом 200 (наверное поэтому сейчас пришел редирект 304)
`If-Modified-Since: Mon, 12 Sep 2022` `18:37:47 GMT`
Страница считается актуальной 0 секунд
`Cache-Control: max-age=0`
**Страница с товаром**
При попытке перейти на страницу с товаром появляется всплывающее окно с этим товаром. Запросы не отправляются.
**Форма регистрации**
При открытии формы - заголовок не изменился. Но при отправке заполненной формы, произошли изменения:

Это пост-запрос. Значит, еще отправлялись данные на сервер
`POST /api/Users/ HTTP/1.1`
Содержимое - json типа. Не длинное.
`Content-Type: application/json
Content-Length: 248`
Этот заголовок может раскрывать ранее посещенные страницы
`Referer: http://localhost:3000/`
В теле запроса обнаружил json-данные в открытом виде. Это совсем небезопасно.

6) Сформировать запрос к приложению через **curl**
Попробуем авторизоваться на сайте с помощью curl.
`curl -H 'Content-Type: application/json' --data '{"email":"qqq@we.ru","password":"1qaz2wsx"}' http://localhost:3000/rest/user/login
`
В ответ получили аутентификационные данные. Хм.. наверное авторизовались.

7) Сформировать запрос к приложению через powershell
Сформируем самый простой запрос

8) Изучить ответ приложения и распарсить его с помощью утилит jq
При использовании jq ответ json приходит в человекочитаемом виде. Удобно.
