javascript 保护客户端API

xam8gpfp  于 2023-03-06  发布在  Java
关注(0)|答案(5)|浏览(130)

bounty将在3天后过期。此问题的答案有资格获得+50声誉奖励。Fifi正在查找此问题的最新答案:这个问题已经有10多年的历史了,答案仍然不相关,也许像Web套接字这样的新技术可能会解决这个问题?

我正在为一个基于JavaScript的游戏构建服务器端API和客户端库,其中必须保护两个非常重要的特性。
1.每次播放都必须向用户借记
1.我们必须确保提交的分数是玩家实际获得的分数。
解决第一个问题似乎很简单;在每场比赛开始时,我们会访问API,借记用户帐户并返回一个唯一的比赛ID。当我们提交用户对该比赛的得分时,我们会传递开始时发出的ID。
第二个问题让我有点困惑。最初我考虑了一个基于ID和分数的客户端哈希算法,但很快意识到生成哈希的Javascript可以很容易地被反向工程,即使它被混淆了。此时我考虑了一个生成哈希的小flash组件,但我听说即使是编译过的flash也可以被反编译。
为了增加上下文,我计划用Ruby构建服务器端API。
我很乐意听到聪明的程序员对堆栈溢出的任何建议。谢谢你的时间!

**编辑:**下面Homer 6的答案对于更复杂的游戏来说是一个非常好的解决方案,但不幸的是,这个游戏的简单性不值得这样的方法。这是一个非常短的游戏时间为基础的游戏,所以分数只是你完成一个级别所需的时间。

dfddblmv

dfddblmv1#

让服务器端成为游戏的一部分。
你可以让API只接收游戏中的动作。这样评分就在服务器端完成了。虽然这会更密集,但也更难伪造。
当然,如果聪明的话,人们仍然可以为它编写机器人。这也增加了服务器交互的延迟。如果有一种方法可以使请求不阻塞,它可能会工作。
高温加热

toe95027

toe950272#

作为一个经验法则,假设客户端中的任何东西都可以伪造。

kiayqfof

kiayqfof3#

下载as3corelib库
让服务器生成密钥
密钥将基于会话,并且将在X分钟后过期
所有进出服务器的数据都将使用此密钥进行加密
事实上,数据是用一个使其贬值的密钥加密的,这使它更加安全。

pkln4tw6

pkln4tw64#

我建议你继续使用你的flash组件,并使用一个好的flash swf加密器来使它更安全地防止反编译。http://asgamer.com/2009/why-how-to-encrypt-your-flash-swf

uqxowvwt

uqxowvwt5#

将用户分数扩展为类似于日志的数据结构:

<action type="1" score="+3" totalscore="3" gamestate="depends on the game"/>
<action type="4" score="+1" totalscore="4" gamestate="depends on the game"/>

并创建一个服务器端验证算法。然而,将所有游戏逻辑带到服务器要安全得多

相关问题