具有共享会话和用户身份验证的 WebSockets 和 HTTP 安全性

Kri*_*ris 0 javascript php security websocket node.js

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

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

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

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

mok*_*oka 5

这个问题很广泛,除了缺乏知识和经验外,不涉及任何具体挑战。

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

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

再次 - 这是一个过于宽泛且非常“讨论”式的问题,而不是一个特定的挑战。