首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML5游戏安全连接数据库(用户停止手动JavaScript )

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

Stack Overflow用户
提问于 2013-12-03 11:13:21
回答 1查看 1.2K关注 0票数 2

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

当玩家单击“攻击”并运行一个名为JavaScript的playerMove('attack')函数时,有什么可以阻止用户进入他们的浏览器开发工具并手动运行这个函数?还是在替代服务器上使用类似的代码,并对服务器上相同的公共脚本运行跨站点Ajax调用?

有办法解决这个问题吗?即使我的游戏是作为客户端应用程序(如C#或其他什么)制作的,这些问题不会仍然存在,但用户执行起来会更困难。或者,如果正确的话,直接通过MySQL连接到C#基本上是安全的。但是,如果C#向PHP脚本发送POST请求,你会不会回到这样一个问题:由于脚本是公开的,它们可以是来自其他来源的POSTed吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 11:27:16

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

  • 对请求中的数据进行基本验证。
  • 检查主题玩家攻击请求是否来自正确的帐户。
  • 检查玩家目前正在战斗,该轮到他了,攻击的目标是有效的,玩家没有任何防止攻击的状态效果,等等。任何游戏逻辑规定玩家现在不能攻击。
  • 计算攻击的效果。
  • 更新数据库。
  • 将结果返回给客户端。
  • 通过长轮询、WebSockets等将结果返回给所有其他客户端。

现在,如果玩家试图在无法调用AJAX时进行AJAX调用,那么服务器验证应该阻止它。记住,客户端都是输入/输出,没有JS和PHP之间的大量代码重复,就无法执行任何游戏逻辑。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20349583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档