【问题标题】:What should I do if I want to prevent cheating by substituting values on front-end?如果我想通过在前端替换值来防止作弊,我应该怎么做?
【发布时间】:2021-03-16 15:20:29
【问题描述】:

我创建了一个游戏并将分数保存在数据库中。 如您所知,我们可以更改检查元素中的变量并将ner = score更改为ner = 50000,然后玩游戏,它会发布50000分。 我不希望这种改变产生影响。 有什么解决办法吗?

// this is my post code:

ner = score, ter = $("#namesee").val(), $.post("http://localhost/sargarmi/scores.php", { morin: ter, eldo: ner }, function(e) { JSON.parse(e) })

【问题讨论】:

  • 混淆您的代码,但您无法阻止这种情况发生。
  • 不,那是不可能的。物理访问始终位于特权顺序之上,用户将始终能够使用在其系统上执行的代码做任何他或她想做的事情。您可以通过默默无闻来增加安全性,但它永远不会阻止任何真正尝试过的人。
  • 不,没有客户端解决方案,访问者可以访问您页面上的任何脚本和变量,他们可以发送他们想要的任何信息。
  • 这是一个经典问题,归结为:您无法信任客户。发送的任何数据都可以修改。让这个有点安全的唯一方法是让服务器进行评分(但显然游戏本身仍然可能被“欺骗”)

标签: javascript client-server


【解决方案1】:

上面的 cmets 完全正确:您不能依赖客户端。攻击者可以轻松跟踪您发送的数据,并简单地替换值并发出另一个请求。

为了防止此类作弊,您需要在服务器端执行分数计算。我不知道您正在实施什么样的游戏,但让我们以一个简单的问答游戏为例。在这种情况下,您的 API 应该返回问题,而用户应该发回答案。然后在服务器上检查答案,计算分数并保存到数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2016-05-01
    • 2011-01-22
    • 2012-09-29
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多