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

Php 如何用javascript制作一个安全的游戏?,php,javascript,security,Php,Javascript,Security,我正在使用javascript开发一些html和css的游戏,我想知道是否有任何方法可以保护游戏,这样用户就不能只调用game.php?result=victory来完成游戏并获得一些分数 到目前为止,这里是我的解决方案 对于一个偶然的游戏,开始页面 有了结果,我们就赢了 或者放松,然后做一些 动画来显示它,但所有的 得分和获胜/失败的事情已经完成 服务器端 对于战斗游戏,只需获得 来自javascript调用的操作,以及 做损伤计算,反应 服务器上的opont的 发回数据 但最后一个解决方

我正在使用javascript开发一些html和css的游戏,我想知道是否有任何方法可以保护游戏,这样用户就不能只调用game.php?result=victory来完成游戏并获得一些分数

到目前为止,这里是我的解决方案

  • 对于一个偶然的游戏,开始页面 有了结果,我们就赢了 或者放松,然后做一些 动画来显示它,但所有的 得分和获胜/失败的事情已经完成 服务器端

  • 对于战斗游戏,只需获得 来自javascript调用的操作,以及 做损伤计算,反应 服务器上的opont的 发回数据

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

不,没有办法。

将用户操作发送到服务器有什么问题?

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

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


不应在victory页面(如果有)上进行计算/奖励。

确保其安全的唯一方法是在服务器端进行所有计算和验证。几乎所有的在线游戏都是这样。在在线通信中,客户机永远不能被信任,您必须始终确保服务器端的用户确实在做一些有效的事情。(不管怎样,在理论上,在实践中,你必须在一定程度上信任客户,以获得延迟补偿,并将一些非关键的东西转移给客户方)

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


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

这算是一种选择吗?(迟交的答复)

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

它肯定比JavaScript更安全。但是仍然;最好假设您的客户端100%不安全。(即使在C++游戏中,LOL:黑客)


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

我考虑的是移动和低连接,我想避免每半秒钟加载一次。谢谢你的完整答案:)我想我会坚持轮流和偶然的游戏。这是一个非常有趣的选择,我从来没有想过。我真的没有那么多的知识,但这将如何工作?@Angelo R。该链接有更多关于将AS3与JS链接的详细信息:。简而言之,双方都可以互相运行函数调用。通过强制,重要的数据流量通过闪存运行,从而通过服务器运行。您可以将flash转换为与服务器同步的“安全”变量存储,并使用javascript作为“数据显示”。不过:请注意,flash并不是100%的傻瓜,但与Javascript相比,它确实更难反编译。。还有可能project@Angelo然而,创建一个javascript游戏并将数据移植到flash中,这是非常讽刺的。当flash对游戏图形更“有效”时。但是如果你能实现/完成它,请告诉我。这肯定会很有趣。(特别是如果是P2P的话)我希望能够使用flash,但我对它还不够精通。由于某些原因,我永远无法得到舞台/时间表的配合。。。