Socket.io + nodejs 聊天系统以及 PHP:在通过 node 发出之前验证数据


Socket.io + nodejs chat system alongside PHP: validating data before emitting through node

我有一个已经启动并运行的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