Цель этой части рукопожатия - убедиться, что обе стороны соединения являются подлинными участниками WebSocket. Он предназначен для простого внедрения для реальных клиентов и серверов WebSocket, но для злоумышленника сложно обмануть HTTP-клиент, сервер или прокси, претендуя на роль участника WebSocket. В частности, было бы плохо, если бы фрагмент вредоносного JavaScript, работающий в браузере, мог открыть соединение с WebSocket с обычным HTTP-сервером, потому что, как только соединение будет установлено, JavaScript будет иметь полный контроль над тем, что отправлено по каналу, и может попробовать всевозможные искажения над негабаритными данными, чтобы попытаться нарушить или удалить сервер.
Update:
Как @notallama указывает, что легко создать вредоносный клиент WebSocket или просто использовать Telnet для отправки вредоносных данных. Разница в том, что с помощью WebSockets атака происходит из доверенного контекста (браузера пользователя и сети пользователя). Браузеры загружают ненадежный код из Интернета, но часто используются для подключения к HTTP-серверу и посредникам, которые не имеют доступа к Интернету в целом. В качестве крайнего примера предположим, что вместо WebSockets браузеры могут открывать необработанные TCP-соединения (без принудительной проверки CORS, хэш-чек и т. Д.). Теперь вредоносная часть JavaScript может делать все, что угодно, в домашней сети пользователей (или, что еще хуже, в их внутренней сети).
В частности, рабочая группа HyBi потратила чрезмерное количество времени на теоретическую уязвимость в HTTP-посредниках, которая позволила бы избежать загрязнения кэша с помощью соединения WebSocket, чтобы обмануть посредника, чтобы думать, что они разговаривают с обычным HTTP-клиентом.
не мог злоумышленник так же легко подключиться к HTTP-серверу с помощью telnet и отправить ему плохие данные? я действительно не вижу, как это рукопожатие останавливает проблему или даже делает ее значительно сложнее. – notallama