如何使用套接字安全地实现通知系统?

椅凳

我目前正在使用 MEAN 堆栈开发 Web 应用程序。它具有社交方面,所以我希望能够向用户推送通知。

我现在这样做的方式是,当发生某些事情时,它应该是一个通知,它会存储在带有未读标志的 mongo 数据库中。每个客户端将每 30 秒向服务器发送一个 get 请求,并将收到每个标记为未读的通知,然后将其标记为已读。

我想切换到使用消息队列和套接字,这样将使用更少的网络资源,并为用户提供实时体验。我已经考虑过使用 redis 及其 pubsub 结构,但我似乎无法弄清楚如何安全地做到这一点。如果我向受影响的用户推送通知,恶意订阅其他人的频道并收到不适合他们的通知会不会很容易?我是否遗漏了某些东西,或者它只是这种系统的错误方法?

编辑:如果其他人在阅读本文时遇到同样的问题,我将使用我使用的解决方案进行更新。

正如答案所建议的那样,我没有使用rabbitmq,而是认为一个更简单和优雅的解决方案是使用socket.io。当新的套接字连接到服务器时,我会在 redis 内存数据库中保存从 userID 到 socketId 的映射。(在我验证了他们的令牌之后)这样,如果我需要向用户推送通知,我只需在 redis 数据库中查找 socketId,然后将其发送到正确的套接字。这样我就不需要除此之外的任何安全性,因为 socketID 是不可猜测的,并且消息仅通过属于给定用户的单个套接字发送。

这样它只会通过给定套接字的连接发送,因为 socketID 仅用于服务器端来跟踪所有连接。这意味着没有其他人可以使用其他人的 socketID 来“监听”。

莫希特·古普塔

您可以为此使用 RabbitMQ。还有身份验证。请通过以下链接并尝试。

https://www.rabbitmq.com/access-control.html

此外,您还可以仅对所有订阅用户使用订阅身份验证令牌在现有结构中应用身份验证。甚至 redis 也有其主题的安全性。请看下面的链接

https://redis.io/topics/security

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用系统默认套接字实现SocketImplFactory

来自分类Dev

如何使用系统默认套接字实现SocketImplFactory

来自分类Dev

使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

来自分类Dev

如何安全地实现文件树遍历(C语言)

来自分类Dev

如何使用ZeroMQ实现多个套接字?

来自分类Dev

如何安全地获取和使用Facebook App Access令牌使用PHP和Javascript发送通知

来自分类Dev

安全地使用WeakReference

来自分类Dev

如何使用GCD安全地锁定变量?

来自分类Dev

如何使用PouchDB安全地连接到Cloudant?

来自分类Dev

如何通过通用模板“安全地”使用多态?

来自分类Dev

如何安全地在主线程上使用[NSTask waitUntilExit]?

来自分类Dev

如何使用Net :: OpenSSH安全地写入远程文件

来自分类Dev

如何使用open()安全地设置标志?

来自分类Dev

如何安全地使用coxph和子集或权重?

来自分类Dev

如何安全地使用C中的枚举?

来自分类Dev

如何使用TeamCity安全地进行生产发行?

来自分类Dev

如何使用GCD安全地锁定变量?

来自分类Dev

如何通过通用模板“安全地”使用多态?

来自分类Dev

如何安全地使用JSON.stringify?

来自分类Dev

如何使用Net :: OpenSSH安全地写入远程文件

来自分类Dev

如何使用存储的函数安全地检索sql数据

来自分类Dev

如何在 CircleCI 中安全地使用 Gemfury 令牌?

来自分类Dev

如何清除另一个操作系统并安全地安装Ubuntu?

来自分类Dev

如何从正在运行的系统中安全地删除SATA磁盘?

来自分类Dev

如何安全地从操作系统级别的Python沙箱返回对象?

来自分类Dev

如何在系统设置中安全地更改项目名称

来自分类Dev

如何清除另一个操作系统并安全地安装Ubuntu?

来自分类Dev

如何安全地实现Facebook登录和设计数据库?

来自分类Dev

如何在Java桌面应用程序中安全地实现SQL查询

Related 相关文章

  1. 1

    如何使用系统默认套接字实现SocketImplFactory

  2. 2

    如何使用系统默认套接字实现SocketImplFactory

  3. 3

    使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

  4. 4

    如何安全地实现文件树遍历(C语言)

  5. 5

    如何使用ZeroMQ实现多个套接字?

  6. 6

    如何安全地获取和使用Facebook App Access令牌使用PHP和Javascript发送通知

  7. 7

    安全地使用WeakReference

  8. 8

    如何使用GCD安全地锁定变量?

  9. 9

    如何使用PouchDB安全地连接到Cloudant?

  10. 10

    如何通过通用模板“安全地”使用多态?

  11. 11

    如何安全地在主线程上使用[NSTask waitUntilExit]?

  12. 12

    如何使用Net :: OpenSSH安全地写入远程文件

  13. 13

    如何使用open()安全地设置标志?

  14. 14

    如何安全地使用coxph和子集或权重?

  15. 15

    如何安全地使用C中的枚举?

  16. 16

    如何使用TeamCity安全地进行生产发行?

  17. 17

    如何使用GCD安全地锁定变量?

  18. 18

    如何通过通用模板“安全地”使用多态?

  19. 19

    如何安全地使用JSON.stringify?

  20. 20

    如何使用Net :: OpenSSH安全地写入远程文件

  21. 21

    如何使用存储的函数安全地检索sql数据

  22. 22

    如何在 CircleCI 中安全地使用 Gemfury 令牌?

  23. 23

    如何清除另一个操作系统并安全地安装Ubuntu?

  24. 24

    如何从正在运行的系统中安全地删除SATA磁盘?

  25. 25

    如何安全地从操作系统级别的Python沙箱返回对象?

  26. 26

    如何在系统设置中安全地更改项目名称

  27. 27

    如何清除另一个操作系统并安全地安装Ubuntu?

  28. 28

    如何安全地实现Facebook登录和设计数据库?

  29. 29

    如何在Java桌面应用程序中安全地实现SQL查询

热门标签

归档