bounty将在3天后过期。此问题的答案有资格获得+50声誉奖励。Fifi正在查找此问题的最新答案:这个问题已经有10多年的历史了,答案仍然不相关,也许像Web套接字这样的新技术可能会解决这个问题?
我正在为一个基于JavaScript的游戏构建服务器端API和客户端库,其中必须保护两个非常重要的特性。
1.每次播放都必须向用户借记
1.我们必须确保提交的分数是玩家实际获得的分数。
解决第一个问题似乎很简单;在每场比赛开始时,我们会访问API,借记用户帐户并返回一个唯一的比赛ID。当我们提交用户对该比赛的得分时,我们会传递开始时发出的ID。
第二个问题让我有点困惑。最初我考虑了一个基于ID和分数的客户端哈希算法,但很快意识到生成哈希的Javascript可以很容易地被反向工程,即使它被混淆了。此时我考虑了一个生成哈希的小flash组件,但我听说即使是编译过的flash也可以被反编译。
为了增加上下文,我计划用Ruby构建服务器端API。
我很乐意听到聪明的程序员对堆栈溢出的任何建议。谢谢你的时间!
**编辑:**下面Homer 6的答案对于更复杂的游戏来说是一个非常好的解决方案,但不幸的是,这个游戏的简单性不值得这样的方法。这是一个非常短的游戏时间为基础的游戏,所以分数只是你完成一个级别所需的时间。
5条答案
按热度按时间dfddblmv1#
让服务器端成为游戏的一部分。
你可以让API只接收游戏中的动作。这样评分就在服务器端完成了。虽然这会更密集,但也更难伪造。
当然,如果聪明的话,人们仍然可以为它编写机器人。这也增加了服务器交互的延迟。如果有一种方法可以使请求不阻塞,它可能会工作。
高温加热
toe950272#
作为一个经验法则,假设客户端中的任何东西都可以伪造。
kiayqfof3#
下载as3corelib库
让服务器生成密钥
密钥将基于会话,并且将在X分钟后过期
所有进出服务器的数据都将使用此密钥进行加密
事实上,数据是用一个使其贬值的密钥加密的,这使它更加安全。
pkln4tw64#
我建议你继续使用你的flash组件,并使用一个好的flash swf加密器来使它更安全地防止反编译。http://asgamer.com/2009/why-how-to-encrypt-your-flash-swf
uqxowvwt5#
将用户分数扩展为类似于日志的数据结构:
并创建一个服务器端验证算法。然而,将所有游戏逻辑带到服务器要安全得多