Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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_Html - Fatal编程技术网

有没有办法阻止最终用户篡改我页面中的JavaScript游戏代码?

有没有办法阻止最终用户篡改我页面中的JavaScript游戏代码?,javascript,html,Javascript,Html,我正在考虑创建一个HTML5游戏。我知道很可能没有人会试图作弊,但我想确定一下(并且有兴趣看看是否有好的技巧) 我理解拥有开源软件的好处,并且希望我的代码能够被人阅读。然而,在游戏类型的情况下,用户的分数将被发送到服务器进行存储,我可以看到一个问题,即用户可以打开他们的devtools(在大多数浏览器中为F12)并修改脚本或变量中的值,以给自己更高的分数或100条生命。我不在乎人们是否这样做,但我不希望他们的分数被存储 案例研究:糖果盒2(candybox2.net)花了我不到20秒的时间就得到

我正在考虑创建一个HTML5游戏。我知道很可能没有人会试图作弊,但我想确定一下(并且有兴趣看看是否有好的技巧)

我理解拥有开源软件的好处,并且希望我的代码能够被人阅读。然而,在游戏类型的情况下,用户的分数将被发送到服务器进行存储,我可以看到一个问题,即用户可以打开他们的devtools(在大多数浏览器中为F12)并修改脚本或变量中的值,以给自己更高的分数或100条生命。我不在乎人们是否这样做,但我不希望他们的分数被存储

案例研究:糖果盒2(candybox2.net)花了我不到20秒的时间就得到了100000000个糖果


有什么方法可以阻止这种情况发生吗?

阻止这种情况发生的最可靠的方法是运行所有业务逻辑服务器端,只接受来自浏览器的命令。如果关键变量不驻留在浏览器中(或者浏览器中的副本是缓存副本且从未被接受为权威),则客户端操作除了自动化UI操作之外,无法执行任何操作

如果客户端代码必须防篡改,则您已经丢失了;这种方式是错误的,其他机制通常要求用户让你在他的机器上永久安装一个rootkit,这样你就可以通过检查来确认他没有作弊


对于我最近使用ASP.Net作为后端的一些项目,我发现它是JavaScript和动态HTML的一个非常高效的通信层,甚至可以利用HTML 5 WebSocket支持(如果有的话)。

看看这个灵感:facebook只指定了控制台,但这并不妨碍您添加断点,我现在将检查另一个断点,但如何在JavaScript游戏中运行所有业务逻辑服务器端。即使我可以,在某个时候,服务器端的东西也必须从客户端的东西中获取输入,并且这些输入可以被篡改。@user1877408:基本上,服务器运行游戏的模拟,并根据客户端的输入复制客户端的动作。例如,如果客户说他得到了一个不存在或无法从他的位置到达的项目,服务器只会告诉他,“不,你没有。这是根据你的输入实际发生的情况。”@user1877408,你需要验证每个客户机请求的参数;例如,拒绝购买比玩家要支付的硬币还多的小部件的请求,拒绝在冷却时间到期前重复点击某个东西,等等。绝不允许客户端将游戏“保存”到服务器;权威的游戏状态决不能放在客户端JavaScript手中,因为它可以被篡改。您仍然可以让客户端“加载”副本并并行执行以获得更好的响应。或者,在“保存”时,让客户端提交会话期间执行的带有时间戳的所有命令的“事务磁带”,并让服务器重新执行(带验证)提交的日志中的所有业务逻辑。@jeffrey hantin令人惊讶,正是我所寻找的。我从来没有想过创建一个事务磁带,并且可以看到它是如何工作的。非常感谢。