Javascript 如何计算页面上加载的所有JS文件的哈希(以验证html5游戏运行时)

Javascript 如何计算页面上加载的所有JS文件的哈希(以验证html5游戏运行时),javascript,construct-2,Javascript,Construct 2,我制作了html5游戏,用户有时可能会尝试修改以获得更好的高分 我如何在游戏的开始(和运行时)计算整个JavaScript游戏(由Construct2生成)的哈希值,以便比较用户在运行时是否做了任何更改 游戏在iframe中运行,如果它有任何问题,并在游戏结束后发送highscrores。正如我在评论中所说,散列您的源代码,这不是一种有效的反黑客攻击 防止作弊的最有效方法是在服务器端运行引擎,并使用预测性客户端/权威服务器策略验证每个操作 预测性客户机 客户端引擎的行为就像不涉及服务器一样,只在

我制作了html5游戏,用户有时可能会尝试修改以获得更好的高分

我如何在游戏的开始(和运行时)计算整个JavaScript游戏(由Construct2生成)的哈希值,以便比较用户在运行时是否做了任何更改


游戏在iframe中运行,如果它有任何问题,并在游戏结束后发送highscrores。

正如我在评论中所说,散列您的源代码,这不是一种有效的反黑客攻击

防止作弊的最有效方法是在服务器端运行引擎,并使用预测性客户端/权威服务器策略验证每个操作

预测性客户机

客户端引擎的行为就像不涉及服务器一样,只在分数变化时发送数据(例如)以及一些附加信息(例如游戏时间、位置、玩家状态等)。 客户端在每个游戏会话上接收存储在服务器端的唯一令牌以识别它

权威服务器

服务器收到分数和附加信息后,可以对这些数据进行验证,例如:

  • 球员的位置有效吗?(例如:与敌人联手射击)
  • 玩家的状态有效吗?(它能用一颗子弹击落敌人吗?)
  • 比分与比赛时间是否合适?(例如:玩家从一开始2秒的成绩能达到10亿分吗
  • 等等

一旦在服务器端进行验证,您可以在完成后协调游戏状态或通过令牌使游戏无效。

正如我在评论中所说的,对源代码进行哈希处理这不是一种有效的反黑客方法

防止作弊的最有效方法是在服务器端运行引擎,并使用预测性客户端/权威服务器策略验证每个操作

预测性客户机

客户端引擎的行为就像不涉及服务器一样,只在分数变化时发送数据(例如)以及一些附加信息(例如游戏时间、位置、玩家状态等)。 客户端在每个游戏会话上接收存储在服务器端的唯一令牌以识别它

权威服务器

服务器收到分数和附加信息后,可以对这些数据进行验证,例如:

  • 玩家的位置有效吗?(例如:与敌人内联射击)
  • 玩家的状态有效?(例如:它能用一颗子弹击落敌人吗?)
  • 分数与游戏时间的对比是合适的?(例如:玩家可以在2秒开始时获得10亿分吗
  • 等等

一旦在服务器端进行验证,您可以协调游戏状态或在完成后通过令牌使游戏无效。

在创建哈希时,将其存储在常量中,在游戏循环期间获取当前用户的哈希,并将其与存储的值进行比较。或者,您可以创建字典/对象以跟踪使用t的用户继承人关联的散列。谢谢!我的问题是,如何从所有JS类创建散列。我将散列发送到游戏后端,在那里我们可以看到一些用户是否有不同于其他用户的散列。因为智能用户可以简单地运行XHR调用到您的分数服务,而无需对代码进行任何更改,这可能不像您想象的那样是一种强大的保护。它比修改(可能缩小)简单得多game sourceGood point,与后端的通信受到保护,实时通信阻止用户发送呼叫。其目的是阻止用户创建自己的客户端。创建哈希时,将其存储在常量中,在游戏循环期间获取当前用户的哈希,并将其与存储的值进行比较。或者,您可以n创建一个字典/对象来跟踪用户及其关联的哈希。谢谢!我的问题是,如何从所有JS类创建哈希。我正在将哈希发送到游戏后端,在那里我们可以看到一些用户是否有不同的哈希,因为智能用户只需对您的分数服务运行XHR调用,而不需要更改代码总之,它可能不像你想象的那样是一种强大的保护。而且它比修改(可能是缩小的)简单得多game sourceGood point,与后端的通信受到保护,实时通信阻止用户发送呼叫。其目的是阻止用户创建自己的客户端。这是一个很好的答案,但我正在寻找类似crc32(document.body)的解决方案,其中crc32是@Tom。这不是一个有效的解决方案;我可以(例如)存储你的散列,根据我的需要修改代码,然后毫无问题地重新发送存储的散列,覆盖计算散列的函数。如果我足够聪明,可以修改游戏引擎,我肯定可以这么做。我想你可以阻止作弊,用最小的努力混合一些技术修改引擎:缩小它,利用对象.freeze()并添加一些验证服务器端。100%防止作弊需要答案解决方案(在线赌博平台使用的解决方案以及区块链和其他技术)这是一个很好的答案,但我正在寻找类似crc32(document.body)的解决方案,其中crc32是@Tom。这不是一个有效的解决方案;我可以(例如)存储你的散列,根据我的需要修改代码,然后毫无问题地重新发送存储的散列,覆盖计算散列的函数。如果我足够聪明,可以修改游戏引擎,我肯定可以这么做。我想你可以阻止作弊,用最小的努力混合一些技术修改引擎:缩小它,利用对象.freeze()并添加一些验证服务器端。100%防止作弊需要答案解决方案(在线赌博平台使用的解决方案以及区块链和其他技术)