socket.id 随着时间的推移是独一无二的,是否应该保密?
Is socket.id unique over time, should it be kept private?
我正在为(大小有限的)gamejam 编写游戏。
我想创建一个排行榜,存储条目的最简单方法是基于玩家的 socket.id。
我这样做安全吗,或者将来是否有机会再次提供给玩家?
此外,我应该保密还是将其作为排行榜的一部分发送给客户是否安全? (即随机玩家是否可以使用此 ID 干扰具有排行榜 ID 的合法玩家?)
A socket.id
仅在给定的 socket.io 会话期间持续。来自同一客户端的未来 socket.io 连接将被赋予一个新的 socket.id
。因此,它不是一个持久的标识符,因此我认为它对排行榜不是很有用,因为它不一定会将来自同一用户(在不同会话中)的多个分数归因于同一用户。相反,您需要一个您自己的服务器创建的持久用户标识符(通常作为用户 signup/signin 进程的一部分),并且可以长期确保它是唯一的,并且同一客户端每次都获得相同的标识符。
至于一个socket.id
的独特性,是通过随机数产生的。它使用模块 base64id 创建唯一 ID 和 doc for that module says that it uses crypto.randomBytes()
. You can see the implementation here.
因此,对于随机数生成,它在概率上是唯一的,但不能保证唯一。乍看 base64id 模块,它似乎将一个递增的数字附加到随机数在某些情况下可以保证它在服务器生命周期内(没有服务器重新启动)唯一,假设增加的数字没有翻转,但仍然不会在不同会话中为同一客户端保持相同的 ID。
should it be kept private
A socket.id
在服务器上是 created/assigned,因此客户端无法尝试欺骗或使用其他用户的 socket.id。因此,没有特别的理由将其保密。 它只是一个唯一的 ID socket.io 用于内部簿记以跟踪给定连接的状态。
如果您曾经看过 socket.id,它并不是特别适合人类消费 and/or 显示在 UI 中。这是一个 base64 字符串,如果显示在排行榜中,对于大多数普通用户来说,它看起来很像乱码。更常见的是,用户在注册您的服务时会指定他们自己的“显示名称”,您会在排行榜中使用它,并且您会使用它作为从一个会话到下一个会话的持久标识符。
我正在为(大小有限的)gamejam 编写游戏。
我想创建一个排行榜,存储条目的最简单方法是基于玩家的 socket.id。
我这样做安全吗,或者将来是否有机会再次提供给玩家?
此外,我应该保密还是将其作为排行榜的一部分发送给客户是否安全? (即随机玩家是否可以使用此 ID 干扰具有排行榜 ID 的合法玩家?)
A socket.id
仅在给定的 socket.io 会话期间持续。来自同一客户端的未来 socket.io 连接将被赋予一个新的 socket.id
。因此,它不是一个持久的标识符,因此我认为它对排行榜不是很有用,因为它不一定会将来自同一用户(在不同会话中)的多个分数归因于同一用户。相反,您需要一个您自己的服务器创建的持久用户标识符(通常作为用户 signup/signin 进程的一部分),并且可以长期确保它是唯一的,并且同一客户端每次都获得相同的标识符。
至于一个socket.id
的独特性,是通过随机数产生的。它使用模块 base64id 创建唯一 ID 和 doc for that module says that it uses crypto.randomBytes()
. You can see the implementation here.
因此,对于随机数生成,它在概率上是唯一的,但不能保证唯一。乍看 base64id 模块,它似乎将一个递增的数字附加到随机数在某些情况下可以保证它在服务器生命周期内(没有服务器重新启动)唯一,假设增加的数字没有翻转,但仍然不会在不同会话中为同一客户端保持相同的 ID。
should it be kept private
A socket.id
在服务器上是 created/assigned,因此客户端无法尝试欺骗或使用其他用户的 socket.id。因此,没有特别的理由将其保密。 它只是一个唯一的 ID socket.io 用于内部簿记以跟踪给定连接的状态。
如果您曾经看过 socket.id,它并不是特别适合人类消费 and/or 显示在 UI 中。这是一个 base64 字符串,如果显示在排行榜中,对于大多数普通用户来说,它看起来很像乱码。更常见的是,用户在注册您的服务时会指定他们自己的“显示名称”,您会在排行榜中使用它,并且您会使用它作为从一个会话到下一个会话的持久标识符。