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

时间:2014-02-18 14:46:23

标签: javascript php node.js security websocket

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

我的问题是,我似乎无法找到有关验证用户信息的大量信息。我已经读过,websockets本质上是相当不安全的,并且验证发送数据的来源是好的...

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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