Node.js 在会话ID中包含工作端口号的安全影响

Node.js 在会话ID中包含工作端口号的安全影响,node.js,security,websocket,distributed-computing,denial-of-service,Node.js,Security,Websocket,Distributed Computing,Denial Of Service,我编写了一个多进程实时WebSocket服务器,它使用会话id根据正在侦听的端口号对相关工作者的流量进行负载平衡。会话id包含主机名、源端口号、工作者端口号和工作者用于唯一标识客户端的实际哈希id。典型的会话id如下所示: 本地主机_9100_8000_0_AoT_eIwV0w4HQz_nAAAV 我想知道工作端口号(在本例中为9100)作为会话id的一部分的安全含义 我有点担心拒绝服务(DoS)威胁——理论上,这可能允许恶意用户生成大量针对特定端口号的HTTP请求(例如,通过使用包含该端口号的

我编写了一个多进程实时WebSocket服务器,它使用会话id根据正在侦听的端口号对相关工作者的流量进行负载平衡。会话id包含主机名、源端口号、工作者端口号和工作者用于唯一标识客户端的实际哈希id。典型的会话id如下所示:

本地主机_9100_8000_0_AoT_eIwV0w4HQz_nAAAV

我想知道工作端口号(在本例中为9100)作为会话id的一部分的安全含义

我有点担心拒绝服务(DoS)威胁——理论上,这可能允许恶意用户生成大量针对特定端口号的HTTP请求(例如,通过使用包含该端口号的假sessionID)——但这是严重威胁吗?(假设你有像样的防火墙)?像谷歌这样的大公司如何从安全角度处理粘性会话

是否还有其他的威胁要考虑?


我这样设计服务器的原因是为了考虑初始HTTP握手以及客户端不支持WebSocket时的情况(在这种情况下,使用HTTP长轮询,因此来自客户端的后续HTTP请求需要转到后端的同一个工作进程)。

因此,您的问题中有几个子问题。我将尝试将它们分开,并相应地回答它们:

针对特定工人的DoS攻击是否是严重威胁? 视情况而定。如果你将有100个用户,可能不会。但是您可以确定,有人会查看您的应用程序,并尝试找出弱点并加以利用

现在,如果您可以只攻击整个服务器,那么针对单个工作进程的DoS攻击是一种严重的可能性吗?事实上,我会说是的,因为这是一种更精确的攻击=>当你一个接一个地进行攻击时,你需要更少的资源来杀死工人。但是,如果您只允许在HTTP的端口80上从外部进行连接,并阻止所有其他内容,则此问题将得到解决

像谷歌这样的大公司如何处理棘手的会话? 答案很简单——谁说他们会?当您使用分布式系统时,有多种其他方法可以解决会话问题:

  • 不要基于服务器存储任何会话,只要在cooky中有一个密钥,您可以使用它再次识别用户,就像自动登录一样
  • 将会话状态存储在数据库或对象存储器中(这将增加大量开销)
  • 将会话信息存储在代理(或代理、http端点等)中,并将它们与请求一起发送给下一个工作进程
我还有其他的威胁要考虑吗? 总是有不可预见的威胁,这就是为什么你永远不应该发布超过必要的信息。在这种情况下,大多数大公司甚至不会发布其Web服务器的正确名称和版本(例如,对于google来说,它是
gws


话虽如此,我明白您的观点,为什么您可能希望保留您的实现,但是您可以稍微修改它,以便在负载平衡器中存储一个字典,其中包含主机名、源端口号、工作端口号的散列值,并将两个散列的集合作为会话id。负载平衡器通过查字典知道需要将其发送给哪个工作者。此信息应与时间戳一起保存,当上次检索信息时,每分钟您都可以删除未使用的数据