Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于服务器端验证的javascript事务日志_Javascript_Php_Html_Anti Cheat - Fatal编程技术网

用于服务器端验证的javascript事务日志

用于服务器端验证的javascript事务日志,javascript,php,html,anti-cheat,Javascript,Php,Html,Anti Cheat,在一个由客户端(js)编写的游戏中,存在多人游戏元素,如排行榜。将用户操作记录到带有时间戳的事务日志中以验证提交数据的完整性的最佳方法是什么?您将如何验证此日志中的操作 是否有必要这样做,或者编写一个哈希函数,将分数提交给服务器,并混淆代码,就足以防止此类欺诈 编辑-游戏描述: 在这个游戏中,你在一张50瓷砖长的地图上行走。在每一个你可以遇到敌人/城镇/事件(寻找硬币等)的磁贴上,每当你到达地图的末端,一个新的地图会以稍微更高的难度加载。这个困难随着玩家和他从城镇购买的物品一起被保存(在MYSQ

在一个由客户端(js)编写的游戏中,存在多人游戏元素,如排行榜。将用户操作记录到带有时间戳的事务日志中以验证提交数据的完整性的最佳方法是什么?您将如何验证此日志中的操作

是否有必要这样做,或者编写一个哈希函数,将分数提交给服务器,并混淆代码,就足以防止此类欺诈

编辑-游戏描述:

在这个游戏中,你在一张50瓷砖长的地图上行走。在每一个你可以遇到敌人/城镇/事件(寻找硬币等)的磁贴上,每当你到达地图的末端,一个新的地图会以稍微更高的难度加载。这个困难随着玩家和他从城镇购买的物品一起被保存(在MYSQL数据库上使用PHP)。根据物品的属性(dmg/hp/defense等),物品会有一个能量值。物品的能量会被求和并保存


实力、阶段(难度)和用户名是排名前10名球员的排行榜显示内容,按最高实力排序。

一般来说,没有有效的方法来防止客户端作弊。
就排行榜和用户发布分数而言,防止作弊的唯一方法是在后端处理数据,或者至少在后端验证数据

在将数据发送到服务器之前对其进行哈希处理不会有帮助,因为有人可以在哈希处理之前轻松修改数据

事务日志不会有帮助,因为有人可以在将数据提交到事务日志之前轻松修改数据,甚至禁用日志记录

模糊处理基本上会使代码更难破解,但肯定不会使其安全


同样,您永远不能信任来自客户端的任何数据,因此您需要一个后端来控制整个游戏过程或验证数据

你能不能多给点背景,也许是你想要实现的代码片段,因为这有点模糊。。。您正在尝试验证哪些操作?移动,得分,你的游戏有什么意义?这个答案适用于任何类型的多人游戏,但是关于你的游戏的一些细节可能会有助于改进这个答案。我将编辑原始问题,并对游戏进行描述。@Levi根据你的更新,看起来你几乎在后端做所有事情。为什么不在后端实现记分板呢?你的数据库中有所有必要的数据。所有的业务逻辑都发生在客户端,我在编辑中提到的功能基本上只是将播放器对象作为json.stringified发送到数据库,其中包含排行榜分数所需的一切,可能我对此不够清楚。它绝大多数不是后端的,字符串会被发送回客户端。然后,客户端将字符串化对象转换为具有这些值的新播放器对象,作为加载角色的一种方式。