安全地将Javascript变量传递给PHP(使用AJAX)

时间:2016-05-27 00:31:44

标签: javascript php jquery ajax

在我概述这个问题之前,我要求答案不是服务器端验证,无论你多么强烈要求你这样做。服务器端验证在此实例中无法工作,但在大多数其他实例中都可以使用。谢谢!

服务器端验证不起作用的原因是脚本是游戏,并且无论用户是否赢得游戏,它都会传递。还包括用户赢得多少钱币:

if(result == 0){
    menu3.innerHTML = "0 Coins Gained";
    $.post("end.php", {
    coins: 0,
    won: "no",
    }, function(result) {
    console.log(result);
    });
...

所以很明显这会传递硬币的数量,如果他们赢了使用AJAX。但是,有人可以轻松地做任何事情,例如:

  • 更改硬币金额
  • 制作自己的剧本
  • 更改结果编号
  • 如果他们赢了就改变

但等等,还有更多的人!

嗯,不是真的,我可能忘了什么。

在发布游戏的最终版本之前,我不能让人坐在那里作弊!而且我确实忘记了某些事情,有人可以写一个表格,将数据发送到该PHP脚本,然后垃圾邮件发送出去,在游戏中创建大银行。

另外,如果不清楚,我是新手,所以任何帮助都表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

所有安全数据都必须保存在服务器上,它不能信任来自客户端的任何内容,因为用户可以更改它。服务器应始终验证从客户端发送的任何可能是作弊的数据。

例如,如果您正在为纸牌游戏进行编程,您可以向玩家发送玩家手中的牌列表(当然,不是任何其他玩家手牌,因为那样让他们偷看")。然后,当客户端发回"我正在播放黑桃王牌时,服务器必须在处理请求之前检查该卡是否在他们手中。

另一个例子是,如果您正在编写涉及滚动骰子的游戏,则必须在服务器上完成,并且服务器必须计算结果。它将结果发送给客户端,客户端将其显示给用户。如果这给用户选择了操作,则客户端显示菜单(或其他一些控件),并将选择发送回服务器。然后,服务器验证这是用户的可用选择。

您可以在玩家登录时将此信息保存在PHP会话变量中。对于长期存储,例如玩家的银行和游戏历史,您通常会使用数据库。