【问题标题】:WebSockets and HTTP security with shared Session and user Authentication具有共享会话和用户身份验证的 WebSockets 和 HTTP 安全性
【发布时间】:2014-03-18 09:49:39
【问题描述】:

所以我正在考虑制作一个图形聊天应用程序/网站(用户坐在 2D 化身的房间里聊天),根据我迄今为止所做的所有研究(很多!),LAMP 堆栈将似乎适合我的大部分网站,一些 node.js 和 websocket 协议用于处理发送的实际聊天数据(用户消息等)。我对创建这种范围的任何东西都不是很有经验(我更习惯于前端工作),但到目前为止这是一个有趣的挑战!

我的问题是,我似乎找不到很多关于验证用户信息的信息。我读过 websocket 本质上是相当不安全的,最好验证正在发送的数据的来源......

不过,我关心的是用户的实际身份。如果我使用 Javascript 启动套接字连接,如何防止用户“欺骗”任何信息?是否可以将用户的 PHP 会话数据连接到处理 websocket 连接的服务器,以便 Javascript 除了实际的消息文本之外什么都不处理?

例如,如果我以“Kris”身份登录并发送消息“Hello!”或更改我的头像的图像,我只希望客户端处理“Hello”或头像图像 URL,并保留所有其他信息来回传递,例如服务器端的用户名,以防止任何人弄乱客户端代码。

【问题讨论】:

    标签: javascript php node.js security websocket


    【解决方案1】:

    问题是广泛的,除了缺乏知识和经验之外,不要涉及任何具体的挑战。

    虽然我仍然会评论一些可能对您有用的观点:

    1. WebSockets 安全性与 HTTP 请求安全性相同 - 取决于您的应用程序。
    2. 需要粘性会话来识别和保持来自不同进程/服务器的会话。如果您决定使用 LAMP(我建议不要这样做),那么您确实需要 PHP 和 node.js 进程之间的粘性会话。
    3. 连接(握手)期间的 WebSockets 使用一些额外的和正常的 cookie 数据执行正常的 HTTP 请求。这可以在服务器端用于恢复会话并将客户端套接字与该会话相关联。一旦套接字断开连接,就必须解除这种关系。
    4. 使用 HTTP 请求或 WebSockets 恢复会话在安全性方面几乎相同,因为 WebSockets 实际上是在会话恢复之后出现的。
    5. 多个技术堆栈,可能会导致通过 Apache 代理 node.js 以在同一域中工作的复杂性。对于您描述的应用程序,我认为不需要这种老式 + 现代堆栈混合物。您可以在前面使用带有 nginx 的纯 node.js 来提供静态文件。这将更容易使用,并且您的代码语言将在整个项目中更加持久,并且更易于维护。
    6. RESTful 使用 node.js 更容易创建,因此再次节省时间。如果需要,您的 node.js 可以直接重用 RESTful API 背后的实际逻辑来获取 socket.io 的数据。
    7. 您需要服务器客户端在通信方面的权威政治。客户端只“询问”,服务器根据它认为是对还是错来做出决定。就安全性而言,这应该是第一条规则。如果客户会做出允许其他人进行黑客攻击和作弊的决定。

    再次 - 这太宽泛了,非常“讨论”风格的问题,而不是具体的挑战。

    【讨论】:

    • 好答案。您不应该在现代浏览器中限制对 HTTP 身份验证(例如 HTTP Basic)的支持。意味着您需要在 Web 套接字层之上实现一些身份验证逻辑。
    • 我用来避免在 WebSockets 上进行任何身份验证,并且在 HTTP 之前使用一些 OAuth 或类似技术进行此操作,一旦完成 - 创建会话用户,然后只有在 WebSockets 建立连接后,您恢复会话并检查您是否已通过身份验证 - 如果没有,请断开连接,如果是 - 很好,您很安全。
    • 聪明的解决方法!我个人尽量避免状态服务器端,但好主意:)
    • 谢谢,但我不认为这是一种“解决方法”:),它是“正确”的做事方式。 WebSockets 不是独立的东西,它们需要像往常一样位于普通 HTTP 之上。实际上,您可以通过 WebSockets 执行类似 OAuth 之类的操作。
    • 取决于你是否想构建一个无状态的应用程序(我认为这是一个很好的做法),在这种情况下你不能轻易使用升级握手,因为不完整的 HTTP 支持
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 2020-12-12
    • 1970-01-01
    • 2021-10-11
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    相关资源
    最近更新 更多