У меня есть приложение PHP, которое уже запущено и работает, и мы должны внедрить в него систему обмена сообщениями в чате. Мы решили сделать это с помощью nodejs и socket.io, так как это кажется наиболее эффективным и одним из лучших задокументированных документов. У меня есть PHP, который обрабатывает все вещи и узлы БД, выполняя то, что наиболее эффективно: неблокирующее io для обновления клиентской части при получении сообщения в реальном времени (через комнаты). У меня также есть аутентификация на основе токенов с использованием jsonwebtokens.
Сейчас все идет хорошо:
Когда кто-то отправляет сообщение
1. JS send an ajax request to PHP
2. PHP saves the message to the database
3. PHP returns a response
4. JS receives the ajax response and then emits an event to signal to the node to update the appropriate clients
5. Node emits an event to the appropriate clients to update their views: notif icons, creates a silly sound and what not.
Что меня беспокоит, так это шаги 4 и 5. Поскольку данные, которые будут переданы узлу на этих шагах, находятся на стороне клиента, любой мошенник может эффективно вносить изменения в эти данные и потенциально может инициировать обновление вид другого пользователя, даже если он не является предполагаемым получателем. Я могу придумать очевидное решение: разрешить узлу иметь доступ к базе данных и проверить, что только законный получатель получит триггер события, но это противоречит цели разделения интересов приложения и узла PHP. Какой стандартный способ справиться с такой ситуацией?
После небольшого чтения я решил использовать Redis из-за его возможности PubSub. Обратитесь к этому для тех, кто имеет такую же проблему: Redis sub / pub и php / nodejs
Других решений пока нет …