代码之家  ›  专栏  ›  技术社区  ›  rnaud

如何用javascript制作一个安全的游戏?

  •  9
  • rnaud  · 技术社区  · 14 年前

    我正在使用javascript开发一些html和css的游戏,我想知道是否有什么方法可以保护游戏,这样用户就不能只调用game.php了?结果=胜利结束比赛并赢得一些分数。

    从现在起,这就是我的解决方案。

    • 如果想玩一个偶然的游戏,请打开页面 结果已经出来了,赢吧 或者放松,然后做一些 动画来显示它,但是 得分和赢/输的事情都完成了 服务器端。

    • 对于一个战斗游戏,只要 来自javascript调用的操作,以及 做损伤计算,反应 服务器上的组件 发回数据。

    但最后一个解决方案意味着每次用户做任何事情时,我都必须发送操作。这可能适用于回合制的战斗游戏,但我认为对于任何其他类型的游戏来说都会慢下来。所以我的问题是,是否有某种安全的方法可以让我的javascript来保护发送的信息。

    5 回复  |  直到 13 年前
        1
  •  15
  •   Rithiur    14 年前

    使它安全的唯一方法是在服务器端进行所有计算和验证。几乎所有的网络游戏都是这样做的。在联机通信中永远不能信任客户端,您必须始终确保服务器端的用户确实在执行有效的操作。(无论如何,在理论上,在实践中,您必须信任客户,以获得延迟补偿,并将一些非关键性的东西卸载到客户端)。

    因此,javascript不是一种很好的开发在线游戏的语言,因为每一个动作都需要经过服务器的处理和验证。对于其他编程语言来说,这并不是一个大问题,因为您可以使用tcp/ip为服务器和客户机构建自己的通信协议。但是,对于javascript,不存在这种可能性,因为您必须依赖http协议和xmlhttprequest处理程序,这将导致非常低效的实时客户机-服务器通信。

    就像你说的,你总是可以用javascript来完成界面,但是为了安全起见,你仍然需要在服务器端执行大量的操作,这对于需要更多面向操作的控制的游戏来说肯定是行不通的。所以,如果你需要安全性的话,你几乎只能玩基于回合的游戏。

        2
  •  3
  •   Kibbee    14 年前

    你可以做一些事情来挫败天真的用户,但可能不是所有人。这完全取决于这个人“攻击”你的游戏的动机。最后,用户可以使用javascript调试器来查看您的代码正在做什么,并复制它。即使你发送回每一个游戏动作,用户仍然可以复制。如果你不小心用户能做什么动作,他们可能会发回那些如果他们用默认的控制方案控制游戏是不可能的动作。

        3
  •  2
  •   Anurag    14 年前

    应该没有胜利的网址。在游戏过程中,客户端应该发送用户操作,如果他们赢了,服务器会将他们重定向到胜利页面。

    胜利页上不应计算/奖励,如果有的话。

        4
  •  2
  •   PicoCreator    13 年前

    这会被认为是一种选择吗?(迟答)

    把关键(你不想被黑客攻击的东西)转移到一个隐藏的内部flash播放器上,这个播放器同时充当关键变量存储、计算器(例如:生命点)和“通信器”到服务器上存储这些游戏数据。

    它绝对比javascript更安全。不过,最好还是假设你的客户端是100%不安全的。(即使在C++游戏中,LOL:黑客)

    但是,通过将游戏数据的流量传输到flash,您可以利用它的一些更有趣的通信功能,例如:p2p=)

        5
  •  1
  •   Your Common Sense Juan Carlos Alvez Balbastro    14 年前

    不,没有办法。
    向服务器发送用户操作有什么问题?