我应该为我的游戏使用 websockets (ws) 还是安全 websockets (wss)?

信息安全 tls Web应用程序 网页浏览器 网络服务器 网络套接字
2021-09-02 17:08:38

我正在制作一个游戏,我使用 websockets 进行 99% 的通信。唯一的 http(s) 是在初始页面加载和登录/注册时。

我是一个完全的菜鸟,如果我错了,请纠正我,但 SSL 仅用于防止中间人攻击,对吗?我通过 websockets 发送的数据包都不是“机密”的。它主要是 [packetName, xCoord, yCoord]。我想不出我要发送的任何游戏包,如果第三方拿到它们会很重要(即使那个人也在同一个房间里玩同一个游戏,因为每个人都可以在里面看到其他人游戏)。

我知道始终使用 SSL 通常被认为是最佳实践,但我的游戏在客户端和服务器之间有大量的来回通信(每秒有很多位置更新,我希望尽可能少地使用延迟/带宽/处理)所以我'想知道有没有必要?

如果我不启用 wss,可能发生的最糟糕的事情是什么?

2个回答

(tl;底部的博士)

此时加密基本上是免费的,即使在拨号连接上也是如此。几乎每一种主要语言都内置了它,或者有一个库,等等。不使用 TLS/SSL 的优势是第二次启动时间的一小部分,CPU 使用率的减少可以忽略不计(小百分之一),并且每个会话节省了大约 4kb 的带宽(TLS 在初始握手后对带宽没有明显影响)。所以,假设你在整个游戏中保持连接打开,你几乎没有节省任何东西。

但是,以明文形式发送数据可以让有兴趣玩游戏的人轻松查看它在做什么。一旦他们知道您的协议是什么,他们就可以利用它来发挥自己的优势。使用旨在完成某些任务的工具的人总是会胜过没有该工具的人。随便想想,我想出了机器人、高分操纵、虚假客户端更新、工具辅助游戏和会话劫持。

例如,Botting 就是让电脑为你玩。计算机非常擅长提前预测一百万个动作,因此它们几乎总能选择正确、可靠的动作,在任何情况下都比人类更快地做出动作。这意味着他们会赢,而真正的玩家会输,这最终意味着你的游戏最终会被放弃,或者只是充满了互相玩的机器人。

高分对人们来说意义重大。这是一个自我的事情。因此,当他们玩并获得 250 分时,看到排名靠前的玩家得分为 4,294,967,295,他们就不会费心去玩了。例如,如果高分代码具有易于破解的协议(是的,某些游戏实际上只是报告高分,而服务器只是接受它),则可能会发生这种情况。应该保护该部分不被篡改。

错误的客户端更新可能是也可能不是问题,但基本上归结为您是否可以对客户端“撒谎”,使其认为游戏处于与实际不同的状态。例如,人们可能出现在地图上的错误位置,人们可以“神奇地”传送,因为服务器在不验证输入的情况下接受坐标等等。即使使用加密也可以做到这一点,但这意味着你必须修改二进制而不是仅仅编写自己的客户端。

工具辅助游戏类似于下注:这个人仍在玩游戏,但他们在工具的指导下实时做出最佳决策,即使他们输了。有工具的人通常会比没有工具的人表现得更好(当然,假设有一些练习),所以这通常被认为是作弊,如果没有看门狗来保护客户,就不可能被发现。如果您能以任何您想要的方式修改数据包,那就更容易了。

如果他们能够找出代表他们会话的连接部分,则可能会发生会话劫持。你看,你不能只是将 TLS 连接降级回非加密状态(至少,我不能说)。因此,这意味着您必须断开连接并打开一个新连接。这个新连接需要向服务器识别它是谁。当然,您可以使用某种令牌,但最好是随机数(单一使用值),否则攻击者将知道会话信息,并可能通过重播连接来欺骗合法客户端继续服务器等

总而言之,您应该始终使用 TLS。即使是井字游戏或四连线游戏。某个地方的某个人想要在您的游戏中作弊,而您基本上可以通过启用安全通道来防止所有类型的作弊。除了很小的启动成本外,加密本质上是免费的,因此不使用它并没有真正的好处。如果您正在安全地进行身份验证,那么稍后切换到非安全通道是没有意义的,因为您已经付出了启动的代价。

您应该在您的产品中使用安全的 WebSockets 协议。


给定(极少)您提供的有关游戏细节的信息*这个问题只能得到一般性的回答**

如果我不启用 wss,可能发生的最糟糕的事情是什么?

如果您设计和构建系统时不考虑常见的安全预防措施:

  • 充其量什么都不会发生;

  • 然后有一个完整的灰色区域,您可能最终会失去机会,或者必须分配过多的资源来弥补最初的决定;

  • 更糟糕的是——可能发生的坏事是没有限制的。


*在不完全了解游戏内容的情况下,无法评估使用未加密通信的影响。特别是:你如何利用游戏?用户是否在互相竞争?用户是否被激励作弊(无论是物质上的还是以分数表的形式)?此类分析所需的信息还应包括游戏的未来发展,例如如果它流行并且您将模型从免费更改并决定在未来利用时该怎么办。

**对在产品中使用未加密通信的所有可能危险进行审计时,必须考虑很多因素,以至于它很快就会超过实施适当加密技术的成本。