通过重新 运行 玩家在服务器上的操作来保护多层浏览器游戏
Securing a multilayer browser game by re-running player's actions on the sever
我正在寻找一种解决方案来防止浏览器多人回合制纸牌游戏中的客户端黑客攻击。它在图形上非常简单,因此它是基于 DOM 而不是 canvas/SVG。 (Node.js 后端)
问题是从客户端发送的关于玩家行为的每个数据都可以通过简单地操纵 JS 在客户端被破解。我想不出解决它的好方法(除了可能每秒更改一次的密钥,但这会给服务器带来巨大的负载。)
我想到的解决方案是这样的:在服务器上有一份 HTML 棋盘的副本,每次玩家提交回合时,在服务器上重新 运行它无法更改,因此可以看到玩家实际上可以执行提交的所有操作 he/she。
所以我的问题是:
- 我是否缺少更简单的解决方案? (我不认为任何类型的加密对我有帮助,因为这些操作可以在 发送之前 被操纵。)
- 服务器负载有多严重? DOM 对 Node 的操作有多广泛,如果(希望:)我将拥有一百万玩家,这仍然是一个可行的解决方案吗?
更新-游戏逻辑:
游戏如棋有能。每个玩家都有一个回合,他可以将他的牌移动到其他位置并在这些位置与其他牌战斗。
每个回合都是孤立的 - 它以一种他无法阻止的方式影响其他玩家,因此不需要他对回合做出反应。
所以玩家做了一些动作并提交了。这些行动也可能影响其他玩家,如果他们这样做,他的牌也会改变。
- 很有可能。您没有提供游戏逻辑的详细信息。输入验证取决于游戏类型。
- DOM 操纵是一种矫枉过正。即使你想在 server 上模拟 client,也可以在没有 DOM.[=22= 的情况下这样做]
能简单给我们解释一下游戏的逻辑是什么吗?
P.S。如果正确完成,时间敏感密钥不会使服务器过载。
但你必须始终假设客户端能够破解前端(没有一个软件没有被破解,只要它足够流行)
我正在寻找一种解决方案来防止浏览器多人回合制纸牌游戏中的客户端黑客攻击。它在图形上非常简单,因此它是基于 DOM 而不是 canvas/SVG。 (Node.js 后端)
问题是从客户端发送的关于玩家行为的每个数据都可以通过简单地操纵 JS 在客户端被破解。我想不出解决它的好方法(除了可能每秒更改一次的密钥,但这会给服务器带来巨大的负载。)
我想到的解决方案是这样的:在服务器上有一份 HTML 棋盘的副本,每次玩家提交回合时,在服务器上重新 运行它无法更改,因此可以看到玩家实际上可以执行提交的所有操作 he/she。
所以我的问题是:
- 我是否缺少更简单的解决方案? (我不认为任何类型的加密对我有帮助,因为这些操作可以在 发送之前 被操纵。)
- 服务器负载有多严重? DOM 对 Node 的操作有多广泛,如果(希望:)我将拥有一百万玩家,这仍然是一个可行的解决方案吗?
更新-游戏逻辑:
游戏如棋有能。每个玩家都有一个回合,他可以将他的牌移动到其他位置并在这些位置与其他牌战斗。
每个回合都是孤立的 - 它以一种他无法阻止的方式影响其他玩家,因此不需要他对回合做出反应。
所以玩家做了一些动作并提交了。这些行动也可能影响其他玩家,如果他们这样做,他的牌也会改变。
- 很有可能。您没有提供游戏逻辑的详细信息。输入验证取决于游戏类型。
- DOM 操纵是一种矫枉过正。即使你想在 server 上模拟 client,也可以在没有 DOM.[=22= 的情况下这样做]
能简单给我们解释一下游戏的逻辑是什么吗?
P.S。如果正确完成,时间敏感密钥不会使服务器过载。
但你必须始终假设客户端能够破解前端(没有一个软件没有被破解,只要它足够流行)