保护客户端API
Securing a client-side API
我正在为一款基于javascript的游戏构建服务器端API和客户端库,其中两个非常重要的功能必须得到保护。
- 用户必须为每次播放借记 我们必须确保提交的分数是玩家实际获得的分数。
解决第一个问题似乎很简单;在每次游戏开始时,我们都会访问API,从用户的账户中扣款并返回一个唯一的play ID。当我们提交用户的分数时,我们传递开始时发布的ID。
第二个问题把我难住了。最初我考虑了基于ID和分数的客户端散列算法,但很快意识到生成散列的Javascript可以很容易地进行反向工程,即使它被混淆了。在这一点上,我考虑了一个生成散列的小flash组件,但我听说即使编译过的flash也可以被反编译。
为了增加上下文,我计划用Ruby构建服务器端API。
我很乐意听到Stack Overflow聪明的程序员提供的任何建议。谢谢你的时间!
编辑: Homer6给出的答案对于更复杂的游戏来说是一个非常好的解决方案,但不幸的是,这款游戏的简单性并不值得使用这样的方法。这是一款基于短时间的游戏,所以分数只是玩家完成一个关卡所花费的时间。
让服务器端成为游戏的一部分。
你可以让API只接收游戏中的动作。所以评分是在服务器端完成的。虽然这将更加密集,但更难伪造。
当然,如果聪明的话,人们仍然可以为它编写机器人。这也增加了服务器交互对游戏玩法的延迟。如果有一种方法可以使请求非阻塞,它可能会起作用。
HTH
根据经验,只要假设客户端的任何东西都可以伪造。
下载as3corelib库
让服务器生成一个密钥
该密钥将基于会话,并且也将过期X分钟
所有进出服务器的数据都将使用此密钥进行加密
我建议您继续使用您的flash组件,并使用一个好的flash swf加密器,使其更安全,防止反编译。这可能会有所帮助:http://asgamer.com/2009/why-how-to-encrypt-your-flash-swf
将用户评分扩展为类似于日志的数据结构:
<action type="1" score="+3" totalscore="3" gamestate="depends on the game"/>
<action type="4" score="+1" totalscore="4" gamestate="depends on the game"/>
,并创建服务器端验证算法。但是,将所有的游戏逻辑都放到服务器上会更加安全。
- 客户端服务器REST API captcha实现
- Google API 的客户端库不会执行回调
- 是Google自定义搜索API的客户端请求数量有限
- 使用 RESTful API,如果未定义特定的响应 json 级别,我如何在客户端不出错
- Visual Studio Team Services Rest API未授权的客户端错误
- 授权客户端JS API调用Google'的具有现有访问令牌的gap库
- 关于Parse.com客户端共享应用程序;api密钥
- 使用Twilio JS客户端API时出现JWT令牌过期问题
- 如何在基于API的多页客户端应用程序中组织路由
- JavaScript 中的 Google API 客户端库在本地不起作用
- Google 在 JavaScript 中映射 api 客户端 json
- Google API客户端ID不是't授权
- 用于Google应用程序引擎频道API客户端的无窗口容器
- 用于Node.js的Interactive Brokers TWS API客户端库-组合订单
- 用于Javascript和离线Web应用程序的Google api客户端库
- 在javascript中保护REST oauth 39;s API客户端
- 在Ruby on Rails中使用API/客户端设置进行字段验证
- 谷歌API客户端库用于react项目,Javascript或Node-js
- 调用web API客户端的缺点/优点
- AppEngine API客户端认证在更新后停止工作