Старый и замененный проект 75 спецификации WebSocket не ' t указать заголовки HTTP-запроса Sec-WebSocket-Key1 и Sec-WebSocket-Key2. Почему последний проект включает их и что с точки зрения повышения безопасности?
Вот что я смог выяснить: эти новые поля предназначены для предотвращения межпротокольных атак. Предположим, что в веб-браузере запущен какой-то вредоносный код JavaScript, пытающийся подключиться к серверам, отличным от HTTP и WebSocket (например, FTP, telnet, SSH). В черновике 75 рукопожатие состояло только из того, что клиент отправлял заголовок рукопожатия WebSocket, а сервер ничего не отвечал.После этого клиент мог отправлять \x00...\xFF
фреймовые сообщения. Таким образом, вредоносный код JavaScript в клиенте мог бы подключиться к серверу, отличному от WebSocket (например, telnet), попытаться войти в систему и выполнить там команды. После введения Sec-WebSocket-Key1 попытка подключения к WebSocket будет неудачной, если сервер не вернет контрольную сумму MD5 Sec-WebSocket-Key1 и т. д. Принудительное использование не-WebSocket (например, telnet) сделать это практически невозможно, особенно потому, что код JavaScript не контролирует Sec-WebSocket-Key1 и т. д.