【问题标题】:Socket.io: Check authentication on every event or connectionSocket.io:检查每个事件或连接的身份验证
【发布时间】:2019-06-25 16:15:24
【问题描述】:

我想确保用户在发送聊天之前已登录。为此,我应该使用在每个连接上触发的身份验证中间件还是使用在每个事件上触发的中间件?

我担心如果我使用前者,用户可以先登录然后注销(不会丢失连接)并在未登录的情况下继续发送消息)。

但是,查看所有不同的 stackoverflow 帖子,没有人提到这个问题。谁能告诉我常用的方法是什么?

【问题讨论】:

  • 您的登录和注销是如何工作的?它是通过 socket.io 完成的,还是在 socket.io 连接建立之前通过网页中的 http 完成的?如果它是通过 http 完成的,那么您可以在该用户注销时关闭所有 socket.io 连接,这将阻止您担心的事情。典型的网页会在注销后重定向到新页面(从而断开 socket.io 连接)。
  • 我明白了。这是典型的做法吗?例如,如果黑客弄清楚如何在注销时保持连接,检查每个发射是否会更安全?

标签: node.js websocket socket.io


【解决方案1】:

根据您的问题后面的 cmets,您可以配置两项以更好地保护您的用户。

调整你的 socket.io 实现:

  1. 升级您的 socket.io 实现以使用 2.x。
  2. 利用 'socket.io#origins' 配置来消除 任何域的默认 CORS 通配符。
  3. 在 socket.io 连接中使用经过身份验证的会话。看 'socket.io#adapter' 或 'session.socket.io' 模块替代方案。

调整您的网站安全标头:

  1. 通过以下方式运行您的网站(如果公开) https://securityheaders.com 测试您当前的实现。
  2. 使用 OWASP 的指南获取更多关于 保护您的网站,例如关于使用较新网站的网站 浏览器中可用的安全标头。 https://www.owasp.org/index.php/List_of_useful_HTTP_headers

来源:https://security.stackexchange.com/questions/89660/how-to-secure-my-node-js-socket-io-application-properly

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 2017-05-29
    • 2015-08-29
    • 2020-07-14
    • 1970-01-01
    • 2019-05-23
    • 2016-03-16
    • 1970-01-01
    相关资源
    最近更新 更多