2014-02-18 2 views
0

Итак, я ищу приложение для графического чата/веб-сайт (пользователи сидят в комнате в 2D аватарах и чате) и из всех исследований, которые я сделал до сих пор (много!), стек LAMP, похоже, подойдет мне для большей части сайта, с некоторыми протоколами node.js и websocket, которые используются для обработки фактических данных чата (пользовательских сообщений и т. д.). Я не очень разбираюсь в создании чего-либо из этого объема (я больше привык к работе с интерфейсом), но пока это интересная задача!WebSockets и HTTP-безопасность с общим сеансом и аутентификацией пользователя

Моя проблема заключается в том, что я не могу найти много информации о проверке информации пользователя. Я прочитал, что веб-порты по своей сути довольно небезопасны, и хорошо проверить источник отправляемых данных ...

Я, однако, обеспокоен тем, что это фактическая идентификация пользователя. Если я использую Javascript для инициирования подключения к сокету, как мне запретить пользователю «спуфировать» любую информацию? Можно ли подключить данные сеанса PHP пользователя к серверу, обрабатывающему соединения с веб-сайтами, чтобы Javascript не обрабатывал ничего, кроме фактического текста сообщения?

Например, если я вошел в систему как «Крис» и отправил сообщение «Привет!». или изменил образ моего аватара, я бы хотел, чтобы клиентская сторона обрабатывала URL-адрес «Hello» или URL-адрес изображения аватара и сохраняла всю другую информацию, передаваемую туда и обратно, такую ​​как имя пользователя на стороне сервера, чтобы кто-либо из возиться с клиентским кодом.

ответ

3

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

В то время как я все еще прокомментировать некоторые моменты, которые могут быть полезны для вас:

  1. WebSockets безопасности такой же, как HTTP запросы безопасности - это до вашего приложения.
  2. Важные сессии необходимы для идентификации и сохранения сеанса с разных процессов/серверов. Если вы решите использовать LAMP (что я бы рекомендовал не делать), вам действительно нужен липкий сеанс между процессом PHP и node.js.
  3. WebSockets во время соединения (подтверждение связи) выполняет обычный HTTP-запрос с некоторыми дополнительными и нормальными файлами cookie. Это можно использовать на стороне сервера для восстановления сеанса и связывания клиентского сокета с этим сеансом. Как только сокет будет отключен, ему придется потерять это отношение.
  4. Восстановление сеанса с использованием HTTP-запроса или WebSockets в значительной степени идентично с точки зрения безопасности, так как WebSockets действительно возникает после восстановления сеанса.
  5. Несколько технических стеков, может привести к сложности с proxying node.js через Apache для работы из того же домена. Для приложения, которое вы описали, я не вижу необходимости в этой старой школьной + современной смеси стека. Вы можете пойти с pure node.js с nginx впереди для обслуживания статических файлов. С вами будет намного легче работать, а ваш кодовый язык будет более устойчивым по всему проекту и упростит его работу.
  6. RESTful гораздо проще создать с помощью node.js, чтобы он снова сэкономил время. Фактическая логика API RESTful может быть повторно использована вашим узлом node.js для получения данных для socket.io, если вы хотите.
  7. Вам нужен сервер <> авторитарная политика клиента с точки зрения связи. Клиент только «спрашивает», и серверы принимают решения на основе того, что он считает правильным или неправильным. И это должно быть правило № 1 с точки зрения безопасности. Если клиент примет решения, которые позволят другим взломать и обмануть.

Снова - это слишком широкий и очень «дискуссионный» вопрос стиля, а не конкретный вызов.

+0

Хороший ответ. Вы не должны поддерживать поддержку HTTP-аутентификации (например, HTTP Basic) в современных браузерах. Это означает, что вам нужно реализовать некоторую логику аутентификации поверх уровня веб-сокета. – bodokaiser

+0

Я использую, чтобы избежать какой-либо проверки подлинности в WebSockets и делать это раньше в HTTP, используя некоторые OAuth или аналогичные методы, как только это будет сделано - пользователь сеанса создается, и только после того, как WebSockets установит соединение, вы восстановите сеанс и проверьте, аутентифицировано - если нет, отключите, если да - отлично, вы в безопасности. – moka

+0

Умный обходной путь! Я лично стараюсь избегать государственной серверной стороны, но хорошая идея :) – bodokaiser

Смежные вопросы