@Vadim1899

Безопасна ли такая реализация личных сокет-запросов?

Всем привет!
На гитхабе нашел рабочий сокет-сервер для чата (только для чата). Повозился с ним, сделал обновление контента по нему и еще некоторые мелочи. Появилась необходимость отправлять личные уведомления конкретному пользователю. Насколько я понял, в текущей реализации сокет сервера это не предусмотрено, исходя из этого появилась следующая идея:
1. К сообщению прикреплять шифрованный ключ (изернейм получателя + соль)
2. На php-стороне при авторизации в $_SESSION['hash'] так же положить шифр (тот же юзернейм + соль)
3. Когда сообщение отправляется, оно отправляется всем пользователям. И на клиентской стороне каждого пользователя сверять ключи, если совпадают, то показывать уведомление

Безопасна ли такая реализация личных сокет-запросов?
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
yellow79
@yellow79
Senior Software Engineer
Довольно странная схема взаимодействия, особенно про "отправлять всем".

При подключении к сокет серверу каждый клиент отправляет идентифицирующую информацию, id, name, что угодно. Далее, когда вы хотите отправить сообщение и оно должно быть не для всех, то отправляйте только тем, для кого предназначено сообщение. У вас должен получиться некий массив объектов, в котором есть идентифицирующая информация, по которой вы будете вычислять кому отправлять и ссылки на соединение, в которое отправлять данные. Перед отправкой сообщения проходитесь по массиву, если инфа проходит по критериям, то отправляйте, нет, значит берёте следующий элемент
Ответ написан
megafax
@megafax
web-программист
Если у Вас реализация на socket.io - то можете сделать реализацию через комнаты. При подсоединении сам сокет можно кидать в определенные комнаты: комната со всеми коннектами одного пользователя со всех устройств, комната для уведомлений, комната по правам доступа и т.д. И в дальшейшем делать emit по определенной комнате.
Ваш вариант предполагает отправку данных всем, что не является верным, поскольку проверка происходит на клиентской стороне, а что делать, если будет некое "конфиденциальное" оповещение?
Ответ написан
Ваш ответ на вопрос

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

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