Ответ 1
Существует множество различных аспектов безопасности WebSocket.
Снимки из википедии, которые вы цитировали, относятся к маскировке клиента WebSocket для данных сервера. Это делается для защиты недопустимых посредников (например, прокси-серверов и кешей) от случайного толкования трафика WebSocket в качестве обычного HTTP-трафика. Опасность здесь в том, что протокол WebSockets можно использовать для отравления кэширующего посредника. Тем не менее, я должен отметить, что это была чисто теоретическая проблема, но было достаточно беспокойства о том, что Mozilla и Opera неохотно поставляют версии протокола HISI и ранних версий HyBi для протокола WebSocket. Таким образом, IETF решил добавить к серверу маскировку данных для решения проблемы.
В стороне IETF отвечает за протокол WebSocket (IETF 6455), а W3C отвечает за API WebSocket HTML5 (объект, методы и события Javascript).
Другим аспектом безопасности WebSocket является защита от перекрестного происхождения. Второй фрагмент кода, который вы указали в спецификации API W3C WebSocket, связан с безопасностью перекрестного происхождения. WebSockets поддерживает межсетевые соединения (к другому хосту, с которого была отправлена HTML-страница). Это предупреждение говорит о том, что для WebSockets были использованы , если обычные процедуры кросс-генерации HTTP, это откроет огромную дыру в безопасности. Тем не менее, процедура WebSocket отличается именно по этой причине. Во-первых, квитирование и ответ WebSocket сконструированы таким образом, чтобы соединения WebSocket не могли быть сделаны на HTTP-сервере, который не поддерживает соединения WebSocket: сервер должен подписать/хешировать ключ в специальном способе WebSocket и вернуть это в ответ на подтверждение. Вторая часть заключается в том, что браузер должен отправить заголовок Origin как часть рукопожатия (это указывает, откуда был загружен HTML/Javascript изначально). Это позволяет серверу выбирать, какие домены он позволит создавать соединения WebSocket.
Наконец, существует два режима подключения к WebSocket: незашифрованный (ws://) и зашифрованный (wss://). Зашифрованный режим использует шифрование TLS/SSL для шифрования всех данных, отправленных на сервер и с сервера (включая начальное рукопожатие и ответ). Это тот же механизм шифрования, который используется для HTTPS-соединений (и использует тот же механизм шифрования в браузере). Это предотвращает слежение за третьими лицами за передаваемые данные.
Есть действительно только две версии протокола WebSocket, о которых стоит знать:
-
Hixie76. В этой версии протокола добавлена защита от перекрестного происхождения и хэширование/подпись заголовков. Однако из-за способа разработки протокола трудно добавить поддержку для существующих веб-серверов. Это версия, поддерживаемая в настоящее время в iOS (надеюсь, что iOS 6, наконец, обновится до IETF 6455)
-
IETF 6455. Это версия протокола WebSocket, стандартизованная IETF в ноябре прошлого года (ноябрь 2011 г.). Это стало кульминацией работы рабочей группы IETF HyBi (итерации протокола, ведущего к ней, были обозначены как HyBi XX). Это версия, поддерживаемая текущими версиями Chrome и Firefox, а также IE 10 и вскоре Opera.