Каковы возможные способы аутентификации пользователя при использовании соединения через веб-сокет? - PullRequest
19 голосов
/ 01 декабря 2011

Пример сценария: многопользовательское веб-приложение для чата через подключение к веб-сокету.Как я могу гарантировать (или гарантировать), что каждое соединение в этом приложении принадлежит определенному аутентифицированному пользователю и «не может» эксплуатироваться ложной имитацией пользователя или вмешиваться во время соединения.

при использовании торнадоwebsocket на стороне сервера, чтобы реализовать базовую комнату чата и уже выполнять аутентификацию для части моего приложения, не относящейся к websocket.

ps: предположить, что аутентифицированный пользователь публикует то, что он хочет, и когда другой пользователь открывает страницу листинга элемента и автоматическидругой пользователь добавляется в список слушателей веб-сокета, что я хочу, чтобы каждый пользователь мог общаться с покупателем предмета индивидуально не в чате, а в чате один на один

Ответы [ 3 ]

17 голосов
/ 23 февраля 2012

Прежде всего, о WebSockets следует помнить две вещи: (а) это развивающийся стандарт и (б) он предназначен для работы с ненадежными клиентами.

Самый большой и самыйВажная вещь, которую вы всегда должны делать с WebSockets, это проверять их происхождение.Если источник не совпадает, очевидно, вы не хотите иметь дело с этим клиентом, поэтому игнорируйте их запросы.Кроме того, убедитесь, что вы используете защищенный протокол WebSocket "wss", а не незащищенный протокол "ws".Это гарантирует, что ваши сообщения будут зашифрованы.

Проблема только в том, что эта информация может быть подделана.См. этот пост для быстрой демонстрации этого.

Дополнительная безопасность:

  • Попробуйте отправить соленый токен, посолить его / хэшировать и отправить обратно, ипроверено в фазе рукопожатия.
  • Ограничение запросов, которые происходят слишком часто (как протокол IRC).Если пользователь отправил 10 или более строк в течение секунды, игнорируйте этого пользователя.
  • Выполните быструю проверку на спам (для этого существует множество алгоритмов) - придерживайтесь легкой эвристики, в противном случаебудет обременять ваш сервер.Такие вещи, как наличие слов «бесплатно» или «виагра».Дайте пользователю оценку, которая представляет вероятность того, что он является спамом или является ботом.Когда это нарушено, загрузите их с серверов.

Надеюсь, это поможет!Извините, если это не так.Это мой первый ответ на StackOverflow.: P

1 голос
/ 13 февраля 2012

Я почти уверен, что подключение к веб-сокету отправляет все файлы cookie, которые были установлены в подключении без веб-сокета к вашему приложению. Вы должны иметь возможность запросить в хранилище сеансов Django cookie-файл соединения и определить пользователя, которому принадлежит сокет.

Выезд: https://docs.djangoproject.com/en/1.3/topics/http/sessions/#configuring-the-session-engine

0 голосов
/ 02 декабря 2011

В этом и заключается вся цель подключения к веб-сокету. Вы аутентифицируете их при помощи рукопожатия. Для получения дополнительной информации см. Здесь: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08

...