Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebSocket和HTTP安全性,具有共享会话和用户身份验证_Javascript_Php_Node.js_Security_Websocket - Fatal编程技术网

Javascript WebSocket和HTTP安全性,具有共享会话和用户身份验证

Javascript WebSocket和HTTP安全性,具有共享会话和用户身份验证,javascript,php,node.js,security,websocket,Javascript,Php,Node.js,Security,Websocket,因此,我正在研究制作一个图形聊天应用程序/网站(用户坐在一个房间里用2D头像聊天),根据我迄今为止所做的所有研究(很多!),一个LAMP堆栈似乎适合大多数网站,一些node.js和websocket协议用于处理发送的实际聊天数据(用户消息等)。我对创建这个范围的任何东西都没有非常丰富的经验(我更习惯于前端工作),但到目前为止,这是一个有趣的挑战 我的问题是,我似乎找不到很多关于验证用户信息的信息。我已经读到WebSocket本质上是不安全的,最好验证发送数据的来源 不过,我关心的是用户的实际身份

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

我的问题是,我似乎找不到很多关于验证用户信息的信息。我已经读到WebSocket本质上是不安全的,最好验证发送数据的来源

不过,我关心的是用户的实际身份。如果我使用Javascript启动套接字连接,如何防止用户“欺骗”任何信息?有没有可能将用户的PHP会话数据连接到处理websocket连接的服务器上,这样Javascript就不会处理实际的消息文本以外的任何内容


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

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

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

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

  • 再次强调-这是一个过于宽泛、非常“讨论”式的问题,而不是一个具体的挑战。

    这个问题过于宽泛,除了缺乏知识和经验外,不涉及任何具体的挑战

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

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

  • 再一次-这是一个太宽泛、非常“讨论”式的问题,而不是一个具体的挑战。

    回答得好。您不应该认为对HTTP身份验证(例如HTTP Basic)的支持在现代浏览器中受到限制。这意味着您需要在web套接字层上实现一些身份验证逻辑。我使用避免在WebSockets上进行任何身份验证,并且在HTTP上进行身份验证之前,使用一些OAuth或类似技术,一旦完成—创建会话用户,并且只有在WebSockets建立连接之后,您恢复会话并检查您是否经过身份验证-如果没有,请断开连接,如果是-很好,您是安全的。聪明的解决方法!我个人试图避免