我使用的是HTML、JQuery和PHP/MySQL。我理解大多数情况下,如果我想让这个游戏安全,那么服务器需要做几乎所有的事情,但是在某些情况下,游戏必须告诉服务器去做一些事情。在我的示例中,这是一个RPG类型的设置,它有时需要通过Ajax调用向PHP脚本发送POST请求,该调用可以更新、插入或删除数据库。比如一名玩家赢得一场战斗,他的经验需要附加,或者一名玩家在一场战斗中转弯,它需要计算出从另一个敌人身上取出的HP的数量,并归还它,以及更新敌人的HP。
当玩家单击“攻击”并运行一个名为JavaScript的playerMove('attack')函数时,有什么可以阻止用户进入他们的浏览器开发工具并手动运行这个函数?还是在替代服务器上使用类似的代码,并对服务器上相同的公共脚本运行跨站点Ajax调用?
有办法解决这个问题吗?即使我的游戏是作为客户端应用程序(如C#或其他什么)制作的,这些问题不会仍然存在,但用户执行起来会更困难。或者,如果正确的话,直接通过MySQL连接到C#基本上是安全的。但是,如果C#向PHP脚本发送POST请求,你会不会回到这样一个问题:由于脚本是公开的,它们可以是来自其他来源的POSTed吗?
发布于 2013-12-03 11:27:16
基本上,每次玩家“攻击”请求出现时,服务器至少需要执行以下操作:
现在,如果玩家试图在无法调用AJAX时进行AJAX调用,那么服务器验证应该阻止它。记住,客户端都是输入/输出,没有JS和PHP之间的大量代码重复,就无法执行任何游戏逻辑。
用PHP制作游戏,特别是多人游戏,需要大量的开销和样板。我会认真考虑使用另一种语言/框架。例如,流星为您提供了很多这些东西。客户端、服务器和数据库数据自动同步。它还具有延迟补偿,因此客户机可以运行服务器代码以获得预期的结果,然后在服务器最终响应时更新到实际结果。这将使您的游戏感觉它是实时的,同时仍然让服务器在任何游戏逻辑发生的最后发言权。
https://stackoverflow.com/questions/20349583
复制相似问题