Защитите установку соединения
Проверяйте аутентификацию, Origin по разрешённому списку, размер заголовков и лимиты соединений. Origin полезен для браузерного контекста, но не заменяет авторизацию и не защищает от небраузерных клиентов.
Не передавайте долгоживущие секреты в URL, где они могут попасть в логи и историю. Предусмотрите срок действия токена и его отзыв.
Авторизуйте каждое сообщение
Проверяйте права на канал, объект и тип события на сервере. Ограничивайте размер сообщений, частоту событий, число подписок и стоимость вычислений на соединение.
Учитывайте квоты по аккаунту и сессии наряду с IP, чтобы несколько клиентов за одним NAT не блокировали друг друга.
Контролируйте жизненный цикл соединения
Устанавливайте idle timeout, heartbeat и лимиты ресурсов. Безопасно закрывайте соединения при отзыве прав и не отправляйте клиенту внутреннюю причину антибот-решения.
Наблюдайте за числом соединений, очередью сообщений, ошибками и задержкой доставки. Проверяйте корректность переподключения легитимных клиентов.
Частые вопросы
Достаточно ли ограничить WebSocket по IP?
Нет. Один адрес может быть общим для множества пользователей, а клиент может менять адреса. Учитывайте учётную запись, соединение, операцию и частоту сообщений.
Защищает ли проверка Origin от всех ботов?
Нет. Origin ограничивает браузерные сценарии, но не является аутентификацией и может отсутствовать у небраузерных клиентов.