@jsonuser

Как максимально обезопасить socket.io от подключений снаружи?

Как можно максимально обезопасить сокет ио от подключений снаружи? Т.е чтобы дофига умные пользователи не могли подключится к сокету, а доступ был только при подключении с сайта.
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 3
nowm
@nowm
При подключении можно просить пользователя пройти reCAPTCHA v3 (та, которая невидимая). Сам токен рекаптчи можно передавать в качестве GET-параметра во время подключения к сокет-серверу. Плюсы в том, что обычные пользователи не будут видеть никакую каптчу и им не нужно жать на «я не робот». Минусы: иногда возможны false positive, время соединения немного увеличивается, потому что вы на серверной стороне делаете запрос к рекаптче, чтобы верифицировать токен, да и инициализация рекаптчи в браузере тоже не мгновенная.

Пока каптча не пройдена, данное конкретное сединение не должно подключаться ни к каким комнатам, для него не должно слушаться никаких событий и так далее. Вся эта инициализация проходит только после того, как вы проверили каптчу.

Работает более или менее надёжно.

Если вы самостоятельно добавляете какие-то GET-параметры, чтобы типа «отличить» робота от неробота, не забывайте про то, что автору робота никто не мешает посмотреть исходники или сделать реверс-инжиниринг соединения и внести небольшие изменения в свой код. Фишка рекаптчи в том, что её сложно автоматизировать, и токены, которые она генерирует, всегда разные.
Ответ написан
space2pacman
@space2pacman
Просто царь.
Как вариант передавать что-то на сервер, что позволит проверить авторизованный пользователь или нет.

Клиент
let socket = new io("http://localhost:7777", { query: "id=123" });


Сервер
io.on("connection", socket => {
    let id = socket.handshake.query.id;
    console.log(id) // 123
})


Пример проекта: https://github.com/space2pacman/pacman-chat
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы