【问题标题】:How to safely send highscores data to server如何安全地将高分数据发送到服务器
【发布时间】:2021-04-23 18:05:41
【问题描述】:

我正在创建一个简单的浏览器游戏,并希望在玩家输掉比赛后将他们的得分保存在数据库中。没有授权或复杂的事情只是用户输入他的昵称并将{nickname: string, score: number} 发送到服务器。这很容易,但我如何确定客户端发送到服务器的score 与玩家在游戏中得到的值完全相同? 例如,可能有人可以使用 postman 之类的东西,并将他想要的分数发送到 API 端点,这并不酷。

【问题讨论】:

标签: javascript node.js reactjs frontend


【解决方案1】:

通常:你不能

您有几个选项可以让作弊变得更加困难:

  • 混淆数据的发送,添加一些复杂的数学运算、一些散列等,使提交虚假分数变得不那么容易。这显然无助于有动机的攻击者/作弊者。
  • 提交解决方案以及分数。例如。如果你有一个益智游戏并计算时间和移动直到一个谜被解决 - 然后将所有移动的数组发送到服务器,这样服务器可以验证解决方案和分数(在某种程度上)
    • 可选择持续与服务器对话以将当前进度 + 时间发送至服务器
  • 当然,所有这一切都不会阻止用户找出解决方案,然后立即“解决”难题,但无论如何您都无法对此做任何事情,除了实施一些“欺诈检测”。这包括在解决方案的每个步骤之间预期一些时间,如果步骤发生在几微秒内,那么您不太可能有人类用户,如果所有步骤正好相隔 1.5 秒,等等。

总的来说,这是一个非常复杂而复杂的话题,没有完全可行的解决方案。每个游戏都可以通过不同的攻击媒介被欺骗,例如:

  • 国际象棋(或其他策略游戏)可以通过在您旁边有一台计算机为您计算和下棋来击败
    • 这里有很多欺诈检测,例如将所玩的动作与另一个引擎会玩的动作进行比较 - 如果重叠太大,你就不会与人类对战,如果对手在所有动作上花费相同的时间,即使是最简单的动作,你很可能不是与人类打交道
  • 任何 FPS 都可以有墙黑客/瞄准机器人
    • 这里正在做很多工作,来自游戏开发者和黑客社区,大量代码混淆、punkbuster 和其他反作弊程序监视客户端内存、截屏等。

在谷歌上搜索自己(特别是所谓的“工作证明”)后,我发现 this security.stackexchange post 具有相同的要点并提出了大致相同的对策。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2013-10-31
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多