保护客户端 API 的安全

2024-05-02

我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库,其中必须确保两个非常重要的功能的安全。

  1. 用户每次游玩都必须扣款
  2. 我们必须确保提交的分数是玩家实际获得的分数。

解决第一个问题看起来很简单;在每次游戏开始时,我们都会调用 API,从用户的帐户中扣除并返回一个唯一的游戏 ID。当我们提交用户该场比赛的得分时,我们会传递一开始发出的 ID。

第二个让我有点难住了。最初,我考虑了基于 ID 和分数的客户端哈希算法,但很快意识到生成哈希的 Javascript 很容易被逆向工程,即使它被混淆了。此时我考虑了一个生成哈希值的小型闪存组件,但我听说甚至编译过的闪存也可以反编译。

为了增加上下文,我计划用 Ruby 构建服务器端 API。

我很想听听聪明的 Stack Overflow 程序员提供的任何建议。谢谢你的时间!

Edit:下面 Homer6 的答案对于更复杂的游戏来说是一个非常好的解决方案,但不幸的是,这个游戏的简单性不值得采用这样的方法。这是一款游戏时间非常短的游戏,因此分数只是您完成一个关卡所需的时间。


使服务器端成为游戏的一部分。

您可以使 API 仅接收游戏中的操作。所以评分是在服务器端完成的。虽然这会更加密集,但harder假的。

当然,如果人们聪明的话,他们仍然可以为其编写机器人。这也增加了游戏玩法中服务器交互的延迟。如果有一种方法可以使请求非阻塞,那么它可能会起作用。

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保护客户端 API 的安全 的相关文章

随机推荐

  • 如何在 vue 组件的树视图中激活子类别?

    我有两个 vue 组件 我的第一个组件 父组件 如下所示
  • 转义双引号 JavaScript

    我试图在 iPhone 上查看时运行某种图像格式 在其他情况下运行一些 Flash 视频 var uagent navigator userAgent toLowerCase if uagent search iphone gt 1 doc
  • 从片段调用片段

    我想通过单击当前片段中的按钮来调用当前片段中的另一个片段 这是我的主要活动 import android app FragmentManager import android os Bundle import android support
  • 嵌套 CollectionView 和显示(使用 Visual Studio 2019、Xamarin XPlatform Android)

    嵌套 CollectionView 并在另一个中滚动 官方支持吗 显示这些集合问题 请参阅下面的我的数据模型和 XAML 代码 我没有可以放置生成的屏幕图像的站点 namespace Notes Models public class No
  • 如何在 cgdb 中滚动 gdb 窗口?

    使用 cgdb 时 如何滚动浏览 gdb 窗口中可见的输出 PgUp 和 PgDn 应该滚动 gdb 窗口 如果他们不这样做 请检查您的TERM环境变量并确保其设置正确
  • 具有现有仿射变换的 UIKit Dynamics

    我的观点有一些尺度上的转变 当我在其上应用一些 UIKit Dynamics 时 它会将它们归零 如何在视图上保留现有的转换 同时使其跳转 P 谢谢 看看 UIDynamicAnimator 的updateItemUsingCurrentS
  • 是否有 NoSQL 解决方案的比较(在某些情况下哪个更好?)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我在 Linux PHP 架构中构建基于密钥的归档应用程序时 我正在尝试了解有关 NoSQL 的更多信息 谁能解释一下主要解决方案
  • 表单验证后 isValid 保持 false

    我有一个自定义验证函数 但即使它没有返回错误 表单仍然无效 我将以下属性传递给 Formik validate import files gt return import files values length 0 import files
  • 如何从 python 脚本更改 python 文件中的变量值

    我目前有一个 python 文件 其中包含一堆带有值的全局变量 我想从一个单独的 python 脚本永久更改这些值 我尝试过 setattr 等 但似乎不起作用 有没有办法做到这一点 简短的回答是 不 不值得这么麻烦 听起来您正在尝试创建一
  • Momentjs 时区 - 获取特定时区时间的日期

    我正在尝试根据用户特定时区的 UTC 基准 创建日期 在本例中使用 momentjs momentjs 时区的 美国 洛杉矶 但是 我没有得到我期望的结果 var tempDate moment 1448841600000 moment 2
  • Matplotlib 动画未显示

    当我在家里的电脑上尝试这个时 它可以工作 但在工作的电脑上却不行 这是代码 import numpy as np import matplotlib pyplot as plt import matplotlib animation as
  • 如何按给定顺序对列表进行排序?

    我正在尝试执行以下操作 我有一个预定义的列表 用作给定列表上的 排序依据 my orderby car boat chicken cat dog mouse or my orderby car gt 0 boat gt 1 chicken
  • Unpickle 二进制文件为文本[重复]

    这个问题在这里已经有答案了 我需要对基本上如下所示的系统进行一些维护 复杂的遗留Python程序 gt 二进制pickle文件 gt 另一个复杂的遗留Python程序 这需要准确弄清楚中间 pickle 文件中的内容 我怀疑文件格式比生成和
  • 正则表达式删除2个字符串之间的所有内容

    我的replaceAll 需要一个正则表达式来删除2 个字符串和字符串本身之间的所有内容 例如 如果我有类似的东西 stackoverflow is really awesome nremove123 n I love it 我试图做一个像
  • android 如何延迟执行

    我正在构建一款具有人工智能功能的安卓棋盘游戏 AI 轮流执行 必须调用一系列操作 然后将无效信息发布到我的自定义视图中进行更新 我需要放慢这些动作的速度 以便用户能够看到人工智能正在轮到它 而不是它一闪而过 我已经尝试过一些类似的事情 tr
  • Objective-C 复制视图

    所以我在这里有一个简短的问题 我有一个视图控制器对象的实例 让我们调用它viewCon1 并且它上面放置了几个子视图 每个子视图都具有独特的属性 让我们称呼他们吧sub1 sub2 and sub3 现在 我以编程方式添加每个子视图 执行以
  • 每次加载解决方案时,所有项目引用都有黄色三角形

    我的所有项目 来自同一解决方案 引用都标有黄色三角形 这些项目都设置为相同的 NET 版本 4 5 1 错误日志说 无法引用项目 CommonLibrary 暂时解决该问题的方法是 删除并重新添加引用 右键单击并选择 添加服务引用 并立即取
  • 如何使用VerQueryValue?

    我有一个 exe 需要从特定 dll 检索版本信息 例如 FileDescription 我的代码已经调用了 GetFileVersionInfoSize 和 GetFileVersionInfo 但我不知道如何应用 VerQueryVal
  • 检查argc的值[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我对传递给程序的 argc 数量有疑
  • 保护客户端 API 的安全

    我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库 其中必须确保两个非常重要的功能的安全 用户每次游玩都必须扣款 我们必须确保提交的分数是玩家实际获得的分数 解决第一个问题看起来很简单 在每次游戏开始时 我们都会调用