Почему сервер в запросе websocket должен ответить на вызов?
Я читаю спецификацию websocket, и он говорит:
Наконец, сервер должен доказать клиенту, что он получил клиента WebSocket, чтобы сервер не принимал соединения, которые не являются соединениями WebSocket. Это предотвращает злоумышленнику из-за обмана сервера WebSocket, созданных пакетов с использованием | XMLHttpRequest | или форму | представление.
Я читал его несколько раз, но мне все еще не ясно, почему это необходимо.
Ответы
Ответ 1
Механизм вызова-ответа заставляет сервер удостовериться, что клиент является законным клиентом WebSocket, а не script делает забавные вещи.
Задача отправляется в HTTP-заголовке "Sec-WebSocket-Key". Так как браузеры не уверены, что сценарии не могут устанавливать заголовки "Sec- *", это предотвращает открытие script соединения WebSocket через XMLHttpRequest.
Если серверу не пришлось отвечать на вызов, возможно, что некоторые ленивые серверы полностью игнорируют заголовки "Sec-WebSocket- *", оставляя клиентов незащищенными от скриптов-изгоев.
Это может быть также способ позволить клиенту проверить, что он разговаривает с сервером WebSocket, но я думаю, что это не основная причина, так как сервер все равно должен отправлять код статуса 101 Switching Protocols вместе с заголовок "Upgrade: websocket".
Ответ 2
То, что я думаю, что это пытается предотвратить, - это две вещи.
-
Повторно атакуйте, когда человек в середине захватывает пакеты и пытается отправить их на сервер, поскольку сервер задаст другой вызов и, таким образом, отклонит соединение.
-
Http post и xmlhttp запрашивают отправку данных таким образом, что он запускает веб-сокет. Тот факт, что эти два метода не могут ответить, означает, что вызов не отвечает и сокет отклоняется сервером.
Ответ 3
Я начал отвечать на ваш вопрос и понял, что не понял абзаца, как и думал, что Я просил разъяснений в списке Список рабочих групп HyBi. Я буду обновлять, когда/если я получу ответ.
Ответ 4
Я бы предположил, что одна из основных причин - предотвратить атаки на серверы, если веб-сайт script был встроен в популярный веб-сайт, например. Вы можете превратить всю свою базу пользователей в нежелательную бот-сеть.
Это, конечно, не мешает злоумышленнику делать это на открытом сервере websocket, по крайней мере, я не думаю, но он остановил бы атаки на серверах без веб-сервера.