Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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:如何识别通过同一网络连接的设备?_Javascript_Node.js_Websocket - Fatal编程技术网

Javascript WebSocket:如何识别通过同一网络连接的设备?

Javascript WebSocket:如何识别通过同一网络连接的设备?,javascript,node.js,websocket,Javascript,Node.js,Websocket,假设我想限制单个设备与WebSocket服务器的连接数量。为此,我可以比较IP地址,并拒绝重复的IP(如果每个设备的最大连接数为1)。但是,如果两台设备试图使用相同的网络IP连接到我的服务器,最后一台将被拒绝 如果超过WebSocket连接的最大数量,是否有其他方法识别一个设备并拒绝 我正在将Node.js与websocket/ws模块一起使用。我知道这可能不是您想要的答案,但这可能是您在说了所有话并做了所有事情后可能得到的答案: 连接限制(本质上是一个与安全相关的问题)不能由应用层安全地解决。

假设我想限制单个设备与WebSocket服务器的连接数量。为此,我可以比较IP地址,并拒绝重复的IP(如果每个设备的最大连接数为1)。但是,如果两台设备试图使用相同的网络IP连接到我的服务器,最后一台将被拒绝

如果超过WebSocket连接的最大数量,是否有其他方法识别一个设备并拒绝


我正在将
Node.js
websocket/ws
模块一起使用。

我知道这可能不是您想要的答案,但这可能是您在说了所有话并做了所有事情后可能得到的答案:

连接限制(本质上是一个与安全相关的问题)不能由应用层安全地解决。这应该由代理(或者,有时是负载平衡器)层来解决,即使是这种方法也不是完全可靠的(因为数据有限,互联网连接中涉及大量中介)

请考虑应用程序可以访问的远程IP不是真正的IP地址

当从套接字层收集数据时,应用程序将可以访问代理的IP地址、主机层或其他中介。。。但不是客户端的实际IP地址

从HTTP层收集数据时(由
remoteAddress
执行),收集的数据不可靠。它是由客户提供的,很容易被篡改、伪造、欺骗等

简单地说,应用程序没有足够的数据来实际实现这个安全措施


换句话说,这个安全层应该在应用程序暴露于传入连接之前实现,而不是由应用程序层本身实现


@NewToJS建议的解决方案是迄今为止应用程序能够掌握的最佳方法-使用登录系统限制访问,只有注册用户才能建立持久连接,每个用户对可能的连接数量都有限制(通常断开最旧的连接要比拒绝新连接好)。

我知道这可能不是您想要的答案,但这可能是您在说到底后得到的答案:

连接限制(本质上是一个与安全相关的问题)不能由应用程序层安全解决。这应该由代理(有时是负载平衡器)层解决,甚至这种方法也不是完全可靠的(由于有限的数据和互联网连接中涉及的大量中介)

请考虑应用程序可以访问的远程IP不是真正的IP地址

当从套接字层收集数据时,应用程序将可以访问代理的IP地址、主机层或其他中介,但不能访问客户端的实际IP地址

从HTTP层收集数据时(由
remoteAddress
执行),收集的数据不可靠。它由客户端提供,很容易被篡改、伪造、欺骗等

简单地说,应用程序没有足够的数据来实际实现这个安全措施


换句话说,这个安全层应该在应用程序暴露于传入连接之前实现,而不是由应用程序层本身实现


@NewToJS建议的解决方案是迄今为止应用程序能够掌握的最佳方法-使用登录系统限制访问,只有注册用户才能建立持久连接,每个用户对可能的连接数量都有限制(通常断开最旧的连接比拒绝新连接要好).

这里唯一真正的解决方案是在获得对您的服务的任何有意义的访问之前要求帐户登录,并严格控制帐户的创建和分发方式。然后,您只需检查帐户是否已经和当前登录,就可以轻松防止同一帐户的多次访问。这种方法还允许当检测到重复滥用时,您需要执行速率限制、服务滥用检测甚至帐户禁止(临时或永久)

IP地址不是一个有意义的解决方案,因为当客户端位于代理或NAT之后时,您无法知道客户端的真实IP地址是什么,在这种情况下尝试使用IP地址可能会错误地阻止许多合法用户,因为他们可能共享一个公共internet IP地址,即使他们都拥有相同的IP地址ir在他们自己的本地网络上拥有自己的私有IP地址。与Myst所写的相反,您的负载平衡器层也无法可靠地访问真实的客户端IP地址,因此这不是应用层与网络层的问题。这是一个连接端(在所有层)的问题不一定能够访问真实的客户端IP地址(因为客户端代理和NAT)


如果您只是想设置一些障碍以防止偶然或意外地从同一浏览器登录,并且出于某种原因您不想要求帐户登录,那么您可以在首次访问时对浏览器进行cookie,然后在后续访问时检查是否已连接带有cookie的浏览器。这一点都不安全.这很容易失败(只需使用第二个浏览器、第二台计算机或禁用cookie),但它确实可以防止用户意外地这样做,甚至可能会阻止一些不成熟的用户故意这样做。但是,它很容易被击败,所以cookie保护充其量只是一个微弱的障碍。

这里唯一的真正解决方案是在获得对您的服务的任何有意义的访问之前需要登录帐户,并严格执行控制帐户的创建和分发方式。然后,只需检查帐户是否已存在且当前有效,即可轻松防止同一帐户的多次访问