• Добро пожаловать на сайт - Forumteam.bet !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

Тестирование веб-сокетов на защищенность, Ч.1

Chollongarn

Эксперт
Эксперт
Регистрация
13.07.19
Веб-сайт
vk.com
Веб-сокеты - это передовая технология, которая позволяет создавать интерактивное соединение между клиентом (браузером) и сервером для обмена сообщениями в режиме реального времени. Веб-сокеты, в отличие от HTTP, позволяют работать с двунаправленным потоком данных, что делает эту технологию совершенно уникальной. Давайте разберемся, как работает эта технология и чем она отличается от HTTP.



Пример работы Веб-Сокетов.
В чем разница между HTTP и Веб-Сокетами?

Большая часть связи между веб-браузерами и веб-сайтами использует HTTP. С помощью HTTP клиент отправляет запрос, а сервер возвращает ответ. Как правило, ответ происходит немедленно, и транзакция завершена. Даже если сетевое соединение остается открытым, оно будет использоваться для отдельной транзакции запроса и ответа.

Некоторые современные веб-сайты используют Веб-Сокеты. Соединения Веб-Сокетов инициируются через HTTP и обычно долговечны. Сообщения могут быть отправлены в любом направлении в любое время и не имеют транзакционного характера. Соединение обычно остается открытым и бездействующим, пока клиент или сервер не будут готовы отправить сообщение.

Веб-Сокеты особенно полезны в ситуациях, когда требуются сообщения с низкой задержкой или инициируемые сервером сообщения, такие как потоки финансовых данных в реальном времени.

Как устанавливаются соединения Веб-Сокетов?

Соединения Веб-Сокетов обычно создаются с использованием клиентского JavaScript, как показано ниже:

var ws = new WebSocket ("ws: //нормальный-сайт.com/chat");
p.s так же возможно использовать Веб-Сокеты поверх TLS, пример:
wss://нормальный-сайт.com/chat
, обычный же ws используется без шифрования.


Чтобы установить соединение, браузер и сервер выполняют рукопожатие Веб-Сокетов через HTTP протокол. Браузер выдает запрос рукопожатия Веб-Сокетов следующим образом:

GET /chat HTTP/1.1
Host: нормальный-сайт.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket

И если сервер принимает запрос, отправляется следующий ответ:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
Особенности «рукопожатий» веб-сокетов.

Заголовки Connection и Upgrade в запросе и ответе указывают, что это рукопожатие Веб-Сокетов.

Заголовок запроса Sec-WebSocket-Version указывает версию протокола Веб-Сокетов, которую клиент желает использовать. Обычно это 13.

Заголовок запроса Sec-WebSocket-Key содержит случайное значение в кодировке Base64, которое должно генерироваться случайным образом в каждом запросе квитирования.

Заголовок ответа Sec-WebSocket-Accept содержит хэш значения, представленного в заголовке запроса Sec-WebSocket-Key, объединенного с определенной строкой, определенной в спецификации протокола. Это сделано для предотвращения вводящих в заблуждение ответов в результате неверно настроенных серверов или кэширующих прокси.

Как выглядит общение через Веб-Сокеты?

Возьмём к примеру чат который работает через веб-сокеты, после установки соединения через протокол HTTP, сервер получает сигнал «o», и после происходит общение.

Для начала сервер к примеру отправляет вам сообщение с человеком с которым будет происходить общение:

ws.send("Alpine Linux");
И затем идёт отправка сообщений в таком виде:

{"user":"Linux user","content":"Hey Faka Tony Montana!"}
 
Сверху Снизу