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

标签 node.js security dom client server

我正在寻找一种解决方案来防止浏览器多人回合制纸牌游戏中的客户端黑客攻击。它在图形上非常简单,因此它是基于 DOM 的,而不是 canvas/SVG。 (Node.js 后端)

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

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

所以我的问题是:

  • 我是否缺少一个更简单的解决方案? (我认为任何类型的加密都不会帮助我,因为这些操作在发送之前可以被操纵。)
  • 服务器负载有多严重? Node 的 DOM 操作有多广泛,如果(希望:)我将拥有一百万玩家,这仍然是一个可行的解决方案吗?
<小时/>

更新 - 游戏逻辑:

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

每个回合都是孤立的 - 它会以其他玩家在回合中无法阻止的方式影响其他玩家,因此不需要他对回合使用react。

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

最佳答案

  1. 很有可能。您没有提供游戏逻辑的细节。输入验证取决于游戏类型。
  2. DOM 操作太过分了。即使您想在服务器上模拟客户端,也可以在没有DOM的情况下实现。

您能简单解释一下游戏逻辑吗?

<小时/>

附注如果操作正确,时间敏感 key 不会使服务器过载。

但是你必须始终假设客户端能够破解前端(假设它足够流行,没有一个软件未被破解)

关于node.js - 通过在服务器上重新运行玩家的操作来保护多层浏览器游戏的安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27999195/

相关文章:

node.js - 如何处理递归 promise 拒绝?

security - ARM TrustZone 的安全/普通世界与操作系统的内核/用户模式还是 x86 的 Ring0/1/2/3?

php - 敏感数据的基本安全加密?

reactjs - React.js, `DOMContentLoaded` 等于 `componentDidMount` 吗?

javascript - 将 document.write 存储在 JavaScript 中不起作用的变量中

node.js - 结束后写入错误

javascript - 如何将变量传递给嵌套回调函数

ios - 检索在应用程序商店或 iTunes 商店中按给定术语搜索结果的应用程序列表

java - 如何制作 "security environment"?

Java:获取 org.w3c.dom 文档中元素的 xpath