我正在使用javascript一些html和css开发游戏,我想知道是否有任何方法来保护游戏,以便用户不能只是调用game.php?result = victory来完成游戏,赚点钱。
截至目前,这是我的解决方案。
对于机会游戏,请启动该页面 结果已经到位,赢了 或松散,然后做一些 动画展示它,但所有的 得分和胜利/松散的东西都完成了 服务器端。
对于一场战斗游戏,只需获得 来自javascript调用的动作,以及 进行损伤计算,反应 服务器上的oponent和just 发回数据。
但最后一个解决方案意味着每次用户做任何事情时我都必须发送动作。这可能适用于转弯战斗游戏,但我认为对任何其他类型的游戏都会放慢速度。所以我的问题是,是否有某种安全的方法可以准备我的javascript来保护发送的信息。
答案 0 :(得分:15)
使其安全的唯一方法是在服务器端进行所有计算和验证。这就是几乎所有在线游戏的完成方式。客户端永远不可信任在线通信,您必须始终确保在服务器端用户实际上正在做有效的事情。 (理论上无论如何,在实践中你必须相信客户端有点滞后补偿并将一些非关键的东西卸载到客户端)。
出于这个原因,javascript并不是开发在线游戏的非常好的语言,因为每个操作都需要由服务器处理和验证。对于其他编程语言而言,这不是一个大问题,因为您可以使用TCP / IP为服务器和客户端构建自己的通信协议。但是,对于javascript,没有这种可能性,因为您必须依赖HTTP协议和XMLHTTPRequest处理程序,这会导致非常低效的实时客户端 - 服务器通信。
就像你说的那样,你总是可以在javascript中使用界面,但为了安全起见,你仍然需要在服务器端执行大量的工作,这肯定不适用于需要更多动作导向控制的游戏。因此,如果您需要安全性,那么您几乎只能使用基于回合的游戏。
答案 1 :(得分:3)
你可以做一些事情来阻挠天真的用户,但可能不是每个人。这一切都取决于这个人如何“攻击”你的游戏。在一天结束时,用户可以使用javascript调试器来查看您的代码正在做什么,并复制它。即使你发回每个游戏动作,用户仍然可以复制它。如果您不小心用户可以执行的操作,他们可能会发回回操作,如果他们使用默认控制方案控制游戏则不可能。
答案 2 :(得分:2)
胜利应该没有URL。在游戏过程中,客户端应该发送用户操作,如果他们赢了,服务器会将他们重定向到胜利页面。
如果有胜利页面,则不应计算/奖励。
答案 3 :(得分:2)
这会被视为一种选择吗? (迟到的答案)
将关键(你不想被黑客攻击的东西)转移到一个隐藏的内部flash播放器,它既可以作为关键变量存储,计算器(例如:生命点),也可以作为服务器的“通信器”。游戏数据。
它肯定比JavaScript更安全。但是仍然;最好假设您的客户端100%不安全。 (即使在C ++游戏中,lol:黑客)
但是,通过将游戏数据的流量转移到闪存,您可以利用它的一些更有趣的通信功能,例如:P2P =)
答案 4 :(得分:1)
不,没有办法 将用户操作发送到服务器有什么问题?