2010-04-06 42 views
1

我正在制作一款游戏,其中战斗系统使用JavaScript进行战斗。在战斗结束时,你赢或输。如果用户获胜,我需要用他们赚到的XP更新mysql数据库。从JavaScript传递信息到php文件,同时限制用户做它自己?

我能想到这样做的最好方法是让用户在赢得该POST之类的东西之前运行ajax函数,如addxp.php?amount = 235,但如果我这样做,那么用户可以轻松地查看来源,并看到他们可以进入该页面自己更新他们的XP没有战斗。但这是我知道如何去做的唯一途径?

请帮助: -/

+0

唯一安全的方法是切换到服务器端 – knoopx 2010-04-06 00:12:17

回答

1

如果依赖于客户端的Web浏览器来更新战果运行的代码,你没有对代码的控制。许多JavaScript和Flash游戏具有高分评分板,这取决于浏览器在高分注册中的发送情况,因此很容易受此影响。没有真正简单的方法解决这个问题。

你可以试着混淆一些东西,但是有兴趣的人可以很容易地解决这个问题。

正如knoopx在他的评论中提到的那样,解决这个问题的唯一可靠方法就是在服务器端进行计算。例如,客户端浏览器将用户操作发送给服务器,服务器是决定战斗结果的服务器,将结果插入到mySQL数据库中,并将结果发送回客户端。这显然是一个重大的架构变革,你必须决定是否值得。

+0

Drat。我想制作一款真棒基于浏览器的RPG游戏,它实际上可以让你选择你的动作和东西,而不仅仅是点击战斗,它为你做的......我想不出任何其他方式来做除了闪光灯,但我' m不太好用闪光灯:( – 2010-04-06 00:41:23

1

这一个是棘手的,不幸的是没有简单的解决方案。我可以给你一些建议,帮助我创建一个带有现金奖的Flash游戏。它对我来说工作得很好,但又一次 - 这并不完全证明。

首先想一想在特定时间段内可能达到的最高分数。例如,你可以说在打1分钟后你能得到的最高分是200分。

每次有人开始玩游戏时,您都会对服务器执行AJAX调用以获取游戏ID。按照设定的时间间隔(比如说10秒),您可以使用游戏ID和最新得分将您的游戏手机带回家。这样做的唯一方法就是创建一个脚本,定期联系服务器,缓慢递增的分数低于您的最大值。这并不是一件困难的事情,但至少现在我们正在进入我们已经用TamperData消除了休闲l and的领域,并用几分钟的时间来消除无聊。

当您发回当前分数时,您可以执行的另一件事是游戏板的当前状态。这对于捕捉作弊现场并不是那么有用,但它是一个非常好的工具,您可以在颁奖时检查高分是否真实。这给你的系统增加了另一层复杂性,希望能让一些稍微硬核的灯光变得无聊并找到其他的东西去做。

我最后的建议是 - 你绝不会让你的用户立即意识到你在做什么。也就是说,如果某人的分数高于您的高分/时间阈值,您不会让他们知道他们已经绊倒了您的欺骗检测器。在我创作的游戏中,我甚至还记录了他们的高分和他们的cookie。当从数据库中获得高分时,您将SELECT * FROM分数WHERE cheated = FALSE或者cookie = userscookie。这样,除非他们清除他们的cookie并再次检查,否则它们(只有他们)才会看到他们的黑客企图成功。

哦,还有最后一件事;缩小你的JavaScript。这会混淆代码并使其很难阅读。再次,有足够的人可以很容易地绕过这一点,并看看你的代码,但这一切都是为了让你的系统足够复杂,以至于人们不会打扰。

不幸的是,网络的最强点有时也可能是其最弱的。 WWW的本质是源代码是开放的,任何人都可以阅读,这意味着如果不是不可能的话,保护用户的秘密是非常困难的。

+0

)另外,如果游戏没有回家,或者回复时间过长,可以将游戏标记为可疑。请注意“尽量长时间回复”位。 – 2010-04-06 00:44:52

+0

真棒回答。我认为它不会与我的比赛一起工作,因为这不是一个真正的比分,只是赢得或失去目前的战斗。但是,这绝对让我认为,如果我认为外线挥杆的话,我可以想出一些东西。 – 2010-04-06 00:54:43

+0

是你的RPG基于回合还是实时? – 2010-04-06 01:10:08