我有一个已经启动并运行的PHP应用程序,我们必须在其中实现聊天消息系统。我们选择使用nodejs和socket.io来执行此操作,因为它似乎是最有效的,也是最好的文档之一。我有PHP处理所有数据库的东西和节点只是做它最有效的:nonblocking 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应用程序和节点的关注点的目的。处理这种情况的标准方法是什么?