如何计算页面上加载的所有 JS 文件的哈希值(验证 html5 游戏运行时)
How to calculate a hash of all JS files loaded on page (to verify html5 game runtime)
我制作了 html5 游戏,用户有时可能会尝试更改以获得更好的高分。
我如何在游戏的开始(和运行时)计算整个 JavaScript 游戏(使用 Construct2 制作)的哈希值,以便我可以比较用户是否在运行时进行了任何更改。
游戏 运行 在 iframe 中,如果它很重要并在游戏结束后发送高分。
正如我在评论中所说,对您的源代码进行哈希处理并不是一种有效的反黑客手段。
防止作弊的最有效方法是运行您的引擎服务器端,并使用预测client/authoritative服务器策略验证每个操作。
预测客户
客户端引擎的行为就像不涉及服务器一样,仅在分数随一些附加信息(例如游戏时间、位置、玩家状态等)发生变化时发送数据(例如)。
客户端在每个游戏会话中收到一个唯一的令牌存储在服务器端以识别它。
权威服务器
服务器一旦收到分数和附加信息,就可以运行对这些数据进行验证,例如:
- 玩家位置有效吗? (例:与敌人排成一列进行射击)
- 播放器状态有效? (例:它能不能一发子弹就把敌人打倒?)
- 比分与游戏时间是否合适? (例如:玩家能否在开始的 2 秒内获得 10 亿分?
- 等等等等
一旦服务器端验证发生,您可以在完成后协调游戏状态或通过令牌使游戏无效。
我制作了 html5 游戏,用户有时可能会尝试更改以获得更好的高分。
我如何在游戏的开始(和运行时)计算整个 JavaScript 游戏(使用 Construct2 制作)的哈希值,以便我可以比较用户是否在运行时进行了任何更改。
游戏 运行 在 iframe 中,如果它很重要并在游戏结束后发送高分。
正如我在评论中所说,对您的源代码进行哈希处理并不是一种有效的反黑客手段。
防止作弊的最有效方法是运行您的引擎服务器端,并使用预测client/authoritative服务器策略验证每个操作。
预测客户
客户端引擎的行为就像不涉及服务器一样,仅在分数随一些附加信息(例如游戏时间、位置、玩家状态等)发生变化时发送数据(例如)。 客户端在每个游戏会话中收到一个唯一的令牌存储在服务器端以识别它。
权威服务器
服务器一旦收到分数和附加信息,就可以运行对这些数据进行验证,例如:
- 玩家位置有效吗? (例:与敌人排成一列进行射击)
- 播放器状态有效? (例:它能不能一发子弹就把敌人打倒?)
- 比分与游戏时间是否合适? (例如:玩家能否在开始的 2 秒内获得 10 亿分?
- 等等等等
一旦服务器端验证发生,您可以在完成后协调游戏状态或通过令牌使游戏无效。