Node.js 通过在服务器上重新运行玩家的操作来保护多层浏览器游戏

Node.js 通过在服务器上重新运行玩家的操作来保护多层浏览器游戏,node.js,security,dom,client,server,Node.js,Security,Dom,Client,Server,我正在寻找一个解决方案,以防止客户端黑客在浏览器多人轮换为基础的纸牌游戏。它在图形上非常简单,因此它是基于DOM的,而不是canvas/SVG。Node.js后端 问题是,从客户端发送的关于玩家行为的所有数据都可以通过简单地操纵JS在客户端进行黑客攻击。我想不出一个好办法来解决这个问题,除了一个每秒钟都会改变的密钥,但这会给服务器带来巨大的负载 我想到的解决方案是:在服务器上有一份HTML板的副本,每次玩家提交回合时,让它在服务器上重新运行,在服务器上它不能被更改,从而看到玩家可以实际执行他/她

我正在寻找一个解决方案,以防止客户端黑客在浏览器多人轮换为基础的纸牌游戏。它在图形上非常简单,因此它是基于DOM的,而不是canvas/SVG。Node.js后端

问题是,从客户端发送的关于玩家行为的所有数据都可以通过简单地操纵JS在客户端进行黑客攻击。我想不出一个好办法来解决这个问题,除了一个每秒钟都会改变的密钥,但这会给服务器带来巨大的负载

我想到的解决方案是:在服务器上有一份HTML板的副本,每次玩家提交回合时,让它在服务器上重新运行,在服务器上它不能被更改,从而看到玩家可以实际执行他/她提交的所有动作

因此,我的问题是:

我会错过一个更简单的解决方案吗?我认为任何类型的加密都不会对我有所帮助,因为这些操作可以在发送之前被操纵。 服务器负载有多大?DOM对节点的操作有多大的扩展性?如果有希望的话:我将有一百万玩家,这仍然是一个可行的解决方案吗? 更新-游戏逻辑:

这场比赛就像一盘有能力的国际象棋。每个玩家有一个回合,他可以将他的牌移动到其他位置,并在这些位置与其他牌战斗

每一个回合都是孤立的-它以一种他在回合中无法阻止的方式影响其他玩家,因此他对回合的反应是不需要的

因此,玩家做出一些动作并提交它们。这些动作也可能影响其他玩家,如果影响了,他的牌也会改变

很可能。你没有给出游戏逻辑的细节。输入验证取决于游戏类型。 DOM操作是一种过分的操作。即使您希望在服务器上模拟客户机,也可以在没有DOM的情况下进行。 你能简单地解释一下游戏逻辑吗

另外,如果操作正确,时间敏感密钥不会使服务器过载


但您必须始终假设客户端将能够破解前端,没有任何一个软件未被破解,只要它足够流行

我对游戏逻辑进行了更新。您建议如何保护此类游戏?为什么服务器上需要DOM?您可以让服务器记住当前连接的每个客户端的游戏状态。一旦他提交了一个动作,验证它是否适用于当前状态。这是在线浏览器游戏中常见的解决方案。你说得对。你能举一个时间戳键的例子吗?对不起,没有例子。我只是看到它在一些游戏中被使用,知道这是可能的,但没有机会窥视实际的实现。