【问题标题】:server request security with tokens服务器使用令牌请求安全性
【发布时间】:2014-01-20 21:15:00
【问题描述】:

我已经构建了一个浏览器游戏,现在我正在努力让它更安全一些。由于所有服务器请求都是从 javascript 发起的,即使孩子们也可能篡改服务器上的数据。我一直在阅读有关 stackoverflow 的问题并在我的请求中实现了发送/接收令牌,但是我在对服务器的每个请求都重新生成此令牌并将新令牌发送回客户端以进行下一次调用。请求是通过 https 发出的,并且是 POST 类型的。

这是客户端的令牌流程:

var token = 'abcd1234';

$.ajax({
   url: "index.php",
   type: "post",
   data: {
      method: "score",
      value: 50
   }
});

$(document).ajaxSend(function(e, xhr, o){
    o.data += '&token=' + token;
});

$(document).ajaxComplete(function(e, xhr, o){
    var data = JSON.parse(xhr.responseText);
    token = data.token;
});

在服务器端:

if (!isset($_POST['token']) || ($_POST['token'] != $_SESSION['token']))
{
    die();
}
else
{
    // generate new token and send it back along with the response
}

所以我的问题是这个令牌是否增加了我的服务器请求的安全性,以及可以做些什么来进一步提高安全性?

编辑这是一个facebook游戏,所有代码都是javascript,服务器端只处理更新数据库。

【问题讨论】:

    标签: javascript php session xmlhttprequest csrf


    【解决方案1】:

    我真的不认为令牌在使用 Ajax 时有很多作用。

    您应该只在用户会话一侧验证您的所有表单和数据服务器,因为登录本身是识别用户的最可靠的方式。

    令牌仅有助于使会话窃取/骑行更加困难,但如果您编写会话句柄以在更改的 IP 地址上注销用户,这应该足够安全。

    我也有一个在线游戏,我没有做更多的事情,但是验证所有表单和值以防止注入、有效数据并每次正确检查登录/会话,并且从未有过任何糟糕的体验。

    我做的另一件事是安全问题,您应该使用特殊属性标记您的管理员帐户,该属性需要特殊的 IP 范围才能登录,然后我在成熟的网络上使用 whois 查找来获取 ip 范围并输入它进入数据库并查看用户的实际 IP 是否在最小和最大 IP 内,这样即使获得了登录数据,1000 名攻击者中可能会有 1 名拥有正确的 IP 地址以使用管理员帐户登录。

    请记住,生成的令牌将与每个正常的 ajax 请求一起接收和发送,并且想要伤害您和您的页面的人会分析您的表单和请求数据,然后简单地复制该过程。

    这会让脚本小子更难,但对专业入侵者来说却不是。 这完全取决于您对安全问题的偏执程度以及可能的攻击者的技能。

    【讨论】:

    • 感谢您的输入,但整个过程发生在客户端,用户帐户等都在那里。服务器端只是更新数据库而已。
    【解决方案2】:

    正如 Steini 已经说过的,唯一可靠的登录系统是通过会话完成的。客户端解决方案存在无限安全问题。

    例如,您可以使用会话创建系统,然后使用 Javascript 询问 php 用户是否已登录,以及它具有哪些权限。

    这表示您可以使用 PDO 来增加安全性,您还可以从所有表单中获取所有数据以及单独通过浏览器传递的所有变量以排除一些问题。

    如果没有安全的登录系统,您的游戏将成为安全炸弹,迟早会给您带来麻烦。

    【讨论】:

      猜你喜欢
      • 2019-04-20
      • 2020-09-25
      • 1970-01-01
      • 2016-05-15
      • 2018-05-05
      • 2019-11-19
      • 2021-08-27
      • 2017-12-16
      • 2023-03-02
      相关资源
      最近更新 更多