【问题标题】:Securing the Ajax Calls保护 Ajax 调用
【发布时间】:2015-05-12 12:53:40
【问题描述】:

我正在开发一款更像 Subway Surfer 的 HTML5 游戏。想法是用户运行一段时间。通过一些障碍,他我们会据此获得积分。因此,如果用户通过了 5 个障碍,他将获得 20 分。 24 如果他通过了 6 个障碍,以此类推。在每次运行中,用户都会获得一定的分数,然后将这些分数添加到他的总分中。因此,如果用户玩了 5 次,每次他得 10 分,总分将是 50。游戏结束。我正在使用 ajax 来更新每次运行的分数。

我的代码比较简单

var score = window.user_score;
$.ajax({
        url: window.baseURL,
        data: {
            score: score
        },
        method: "POST"
    })

然后在我的 PHP 方面,我正在检查一些东西,比如用户打开游戏和提交分数之间的时间是否正确(即它与分数匹配)以及其他一些检查,比如令牌编号是否有效,分数是不是负数,分数不大于 5000(在那场比赛中没有人可以得分 5000)。但是我仍然看到人们在我的 API 上运行机器人,通过计算所有内容来提交结果。我想要的是有一种方法可以通过一些对客户端不可见并且可以在我的服务器上解密的密钥来加密我的分数。只有这样,用户才能将分数直接发送到我的服务器。我对 https 了解不多,所以如果我们可以使用它来隐藏客户端的密钥并加密分数和所有其他信息,那就太好了。

【问题讨论】:

  • 这是无法解决的,因为游戏必须在浏览器中运行,所以可以进行逆向工程,包括您的 API 调用。

标签: ajax security encryption https


【解决方案1】:

只要在客户端计算得分并发送到服务器,攻击者就有可能调整得分值。您可以通过使用 security by obscurity 来增加难度,这基本上意味着您尝试尽可能地隐藏您的安全措施,因为它实际上 安全。

看看马特在这篇文章中的回答: Safest way to update game score from client to server database? Javascript

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 2012-01-17
    • 2017-06-14
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多