如何防止用户在JavaScript游戏上非法获得更高的分数?

问题描述:

我正在创建一个游戏网站,当玩家完成游戏时,我希望网站将分数更新到数据库。现在我唯一的问题是,玩家可以通过在浏览器中使用JavaScript方法/代码轻松地欺骗他们的分数。我怎样才能做到这一点?如何防止用户在JavaScript游戏上非法获得更高的分数?

+0

那么你应该在将它放入数据库之前对它进行清理...... –

+0

游戏结束后立即将游戏成绩存储在PHP变量中。无论存储在JavaScript中什么都可以忽略。 –

+5

[阻止Javascript游戏调整/黑客]的可能重复(http://*.com/questions/6320996/prevent-javascript-games-tweaking-hacking) – mickmackusa

玩家可以通过在浏览器中使用javascript方法/代码轻松地欺骗自己的分数。

混淆:如果你的目标是防止它发生容易,您可以obfuscate JavaScript代码。 编辑:阅读@mickmackusa's link后,IIFE是一种快速实现你要找的东西的方法。

签名:如果您的目标是防止它发生,您应该考虑使用verifiable signature or hash。这个应用的JS越重,这个越难。例如,如果签名是通过纯JavaScript生成的客户端,则代码为would still leak everything an attacker would need to fake the signature。公认的设计是将私有组件服务器端移动到可以受保护的位置。

混淆是非常有效的,只要反混淆的负担远远大于攻击者找出的奖励(或风险)。

+0

所有我需要确保的是,分数发送到数据库是正确的分数 – blendy

+0

尽量减少问题发生的方式不会影响最终解决方案。如果您需要保证真实性,请使用可验证的不可更改的方法。如果你想过滤掉99%的黑客,使代码变得混乱,甚至在你研究它后如何发送给后端,你也不明白。 – tresf

+0

假设问题主要发生在记分牌上的人询问他们的姓名时,您也可以选择为数据库中的每个分数使用唯一的ID,然后让最终屏幕要求名称简单修改该记录。这仍然不是万无一失的,我建议你在会话中存储某种形式的时间戳,以便有人不会将数据库擦干净。但它仍然是一个糟糕的设计。如果你想保护它,你需要使用安全可靠的数据签名方法。 – tresf