繁体   English   中英

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

[英]Securely Passing Javascript Variables to PHP (Using AJAX)

在概述问题之前,我要求答案不是服务器端验证,无论您有多大的胸怀都敦促您这样做。 服务器端验证在这种情况下不起作用,但在大多数其他情况下将起作用。 谢谢!

服务器端验证不起作用的原因是该脚本是一个游戏,它正在传递用户是否赢得了该游戏。 还包括用户从中赢得了多少枚硬币:

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

因此,很明显,这超过了硬币的数量,并且如果它们使用AJAX获胜了。 但是,某人可以轻松地执行许多操作,例如:

  • 找零金额
  • 自己编写脚本
  • 变更结果编号
  • 如果他们赢了就改变

但是,等等,还有更多的人!

好吧,不是真的,我可能会忘记一些东西。

在发布游戏的最终版本之前,我不能让人们坐在那里作弊! 而且我确实忘记了一些东西,有人可以编写一个表格,将数据发送到该php脚本,然后对其中的内容进行垃圾邮件处理,从而在游戏中大赚一笔。

另外,如果不清楚,我是新手,因此,我们非常感谢您的帮助。 谢谢!

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

例如,如果您正在编写纸牌游戏,则将客户端手中的纸牌列表发送给客户端(当然,不发送任何其他玩家的手牌,因为这会使他们“偷看”)。 然后,当客户端发回“我在玩黑桃A”时,服务器必须在处理请求之前检查此卡是否在他们手中。

再举一个例子,如果您要编写涉及掷骰子的游戏,则必须在服务器上完成,服务器必须计算结果。 它将结果发送给客户端,客户端将其显示给用户。 如果这使用户可以选择操作,则客户端将显示一个菜单(或其他控件),然后将选择发送回服务器。 然后,服务器确认这是用户可用的选择。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM