代码之家  ›  专栏  ›  技术社区  ›  Paganwinter

在服务AJAX或Flash请求时避免CSRF

  •  0
  • Paganwinter  · 技术社区  · 14 年前

    现在我有了一个像www.example.com/update.php?分数=200&uid=234

    问题是,这是非常暴露给一个聪明的用户,他可以使用这个网址来存储任何分数,他想在数据库。此外,没有真正的用户身份验证,我也不打算有一个,因为这是一个真正的小游戏。

    我怎样才能阻止有人打上述网址和更新自己的分数。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Mike    14 年前

    你可能想读一读关于“大理石蛋糕”黑客的故事 online polling system .

    将“提交投票”的概念替换为“提交分数”,您将看到任何客户端控件都注定会失败。

    虽然一个好的步骤可能是加密分数或使用HMAC来防止篡改,但您的加密将在Flash客户机中完成,Flash应用程序可以对密钥进行反向工程(这会增加作弊所需的工作量,但不会防止作弊)。

    为了最大限度地减少作弊,您必须将评分逻辑移到服务器上 你必须运行健全性检查或以其他方式验证玩家的行为;否则,作弊的方法将是执行导致更多分数的无效操作,而不仅仅是报告最终分数。(最后一点是模糊的,因为不清楚这是什么样的游戏。)

        2
  •  0
  •   Sripathi Krishnan    14 年前

    你不能。

    这不再是CSRF的问题了。因为你没有任何认证whatsover,地球上任何人都可以更新其他人的分数。根本无法阻止这种情况发生。

    然后,解决你的CSRF问题。对于这些url中的每一个,您都需要附加一个唯一的令牌。