据我所知,这真的不可能,但我只是想确定在我转向闪存之前.
我可以使html5游戏足够安全,这样人们在玩游戏时就无法改变他们的分数和其他变量吗?
谢谢!
没有"依赖",你的问题的直接答案是"不",我认为我的同事们只是简单地混淆了水域.
你不能相信客户.使用任何语言,无论您是编写程序集还是HTML或Flash,都无法信任客户端.不管你有多少包装你的代码混淆和这样的,它可以和会想通(通常速度比你想象的).
这在任何地方都很紧张,然而人们却不断受到关注.在线游戏获得"speedhacked",因为他们不检查玩家的速度,或者他们找项目重复,因为他们不验证一个球员居然有,他们正在试图做的东西的项目,或瘸一点闪光游戏获得的9999999 hiscore项,因为是一个简单的工具的Tamper Data(一个Firefox插件)是所有需要,因为它是发送到服务器来改变比分.
您无法信任客户端,无论是HTML5还是Flash.
如果是单人游戏,请让玩家作弊.这是他们的决定.如果它是多人游戏,则服务器会验证游戏的每一步,并且规则之外的任何内容都会被抛弃.如果是自己的游戏,请将游戏重播发送到服务器并分析它是否有任何作弊行为,而不是只发送一个数字分数.
由于您的用户可以看到所有源代码,这是一个相当复杂的问题。他们可以在运行时轻松更改任何函数或变量,而您的脚本却一无所知。即使使用复杂的签名函数来验证结果。
我很抱歉,但我认为柯林斯的方式也行不通。我可以更改任何输入以使服务器执行我想要的任何操作。
也许通过服务器持续监控分数将能够检测到任何不可能的变化。但在“可能”结果范围内作弊的人仍然不会被抓到。
最后我想说,你只能让作弊变得相当困难,但对于有一点技巧的人来说并非不可能。
不要将其用于任何可以通过得分最高来赢得某些东西的游戏。
因为这件事对人们来说似乎相当令人费解:
flash 提供编译后的 swf 文件,这些文件(自 flash 9 起)不能被反编译为有用的.smth,因此您可以在其中放置一个秘密,用于对乐谱进行签名。即发送分数和分数+secretkey的md5。所以服务器(也知道密钥,可以检查它)。
此外,flash 变量不太容易修改(您必须在 ram 中找到它们并在那里更改它们,这是一项非常复杂的任务),而 javascript 变量可以使用 webkit 开发人员工具等轻松编辑
更新
实际上我纠正了自己=>所有的swf都可以被反编译,这只会让我们留下代码混淆和“加密”
我想世界毕竟是一个糟糕的地方;)