安全连接到数据库的HTML5游戏(用户停止手动JavaScript)

时间:2013-12-03 11:13:22

标签: javascript php mysql html5 security

我正在使用HTML,JQuery和PHP / MySQL。我在很大程度上理解,如果我想让这个游戏安全,那么服务器几乎需要做所有事情,但在某些情况下游戏必须告诉服务器做事。在我的例子中,这是一个RPG类型设置,它有时需要通过从数据库更新,插入或删除的Ajax调用向PHP脚本发送POST请求。比如一个玩家赢得一场战斗并且他的exp需要被追加,或者一个玩家在战斗中转弯,它需要计算出从另一个敌人身上取下的HP数量并将其返回以及更新敌人的HP

让我们说当玩家点击“攻击”并运行一个名为playerMove('attack')的JavaScript函数时,是什么阻止用户进入他们的浏览器开发人员工具并手动运行此功能?或者在备用服务器上使用类似代码并运行跨站点Ajax调用我服务器上的相同公共脚本?

有没有解决这个问题的方法?即使我有一个作为客户端应用程序的游戏(如C#或其他),这些问题仍然不存在,但用户执行起来更难。或者如果正确完成,通过C#直接连接到MySQL是绝对安全的。但是,如果C#将POST请求发送到PHP脚本,那么这会不会让您回到问题,因为脚本是公开的,可以从其他来源发布它们?

1 个答案:

答案 0 :(得分:3)

基本上,每次玩家“攻击”请求进入时,服务器都需要至少执行以下操作:

  • 对请求中的数据进行基本验证。

  • 检查主题播放器攻击请求是否来自正确的帐户。

  • 检查玩家目前是否在战斗中,轮到他了,攻击的目标是有效的,玩家没有任何防止攻击的状态效果等等。任何游戏逻辑规定玩家可以现在不要攻击。

  • 计算攻击效果。

  • 更新数据库。

  • 将结果返回给客户。

  • 通过长轮询,WebSockets等将结果返回给所有其他客户端。

现在,如果玩家尝试在他们无法进行AJAX调用时,您的服务器验证应该阻止它。请记住,客户端是所有输入/输出,并且在JS和PHP之间没有大量代码重复的情况下无法执行任何游戏逻辑。

使用PHP制作游戏,特别是多人游戏,需要大量的开销和样板。老实说,我想考虑使用另一种语言/框架。例如,Meteor为您提供了很多这样的东西。客户端,服务器和数据库数据会自动同步。它还具有延迟补偿,因此客户端可以运行服务器代码以获得预期结果,然后在服务器最终响应时更新到实际结果。这会让你的游戏感觉它在实时工作,同时仍然让服务器对游戏逻辑发生了最后的发言权。