我正在制作一个战斗系统使用javascript进行战斗的游戏。在战斗结束时,你要么输赢。如果用户获胜,我需要使用他们获得的XP更新mysql数据库。
我能想到这样做的最好方法是让javascript在用户赢得类似addxp.php的东西时运行ajax函数?amount = 235,但如果我这样做,那么用户可以轻松查看来源并看到他们可以自己进入该页面来更新他们的xp而不必争吵。但这是我知道怎么做的唯一方法吗?
请帮助: - /
答案 0 :(得分:1)
如果您依赖客户端Web浏览器上运行的代码来更新战斗结果,则无法控制该代码。许多具有高分板的javascript和flash游戏都依赖于高分注册中的浏览器发送而易受此影响。没有真正简单的方法。
你可以试着在某种程度上混淆一些事情,但是那些有足够兴趣的人将能够相当容易地解决这个问题。
正如knoopx在他的评论中提到的,解决这个问题的唯一可靠方法是在服务器端进行计算。例如,客户端浏览器将用户操作发送到服务器,服务器是确定战斗结果的服务器,将结果插入mySQL数据库,然后将结果发送回客户端。这显然是一个重大的架构变化,你必须决定它是否值得。
答案 1 :(得分:1)
这个很棘手,不幸的是没有简单的解决方案。当我创建一个带现金奖励的Flash游戏时,我可以给你一些帮助我的建议。它对我来说效果很好,但同样 - 它绝不是完全证据。
首先要考虑在给定时间段内可能达到的最高分。例如,你可以说在1分钟后你可以合理获得的最高分为200分。
每当有人开始玩游戏时,您都会对服务器进行AJAX调用以获取游戏ID。按照设定的间隔(比如10秒),您可以使用游戏ID和最新分数将游戏手机置于家中。这样,欺骗的唯一方法是创建一个脚本,定期与服务器联系,并且缓慢递增的分数低于最大值。这不是一件困难的事情,但至少现在我们正在进入我们已经用TamperData消除了随意的louts并且用几分钟来消除无聊的领域。
当您发回当前得分时,您可以做的另一件事是游戏板的当前状态。这对于捕捉生活中的作弊并不是那么有用,但它是一个非常好的工具,你可以在颁奖时使用,以检查高分是真正的。这为你的系统增加了另一层复杂性,并希望让一些稍微硬核的louts感到无聊并找到别的事情。
我的最后一个建议是 - 你决不会让你的用户立即意识到你在做什么。也就是说,如果有人的分数高于你的高分/时间阈值,你什么也不做让他们知道他们绊倒了你的作弊探测器。在我创建的游戏中,我甚至记录了他们的高分以及他们的cookie。从数据库中获取高分时,SELECT * FROM得分WHERE被欺骗= FALSE或cookie = userscookie。这样,除非他们清除他们的cookie并再次检查,否则它们(仅对他们)会出现他们的黑客尝试成功。
哦,最后一件事;缩小你的JavaScript。这将使代码混淆并使其难以阅读。同样,有足够的人可以轻松地绕过这个并查看你的代码,但这完全是为了让你的系统足够复杂以至于人们不会打扰。
不幸的是,网络的最强点有时也可能是最弱点。 WWW的本质是源代码是开放的,任何人都可以阅读,这意味着保持用户的秘密是非常困难的,如果不是不可能的话。