繁体   English   中英

如何在JavaScript中制作安全游戏?

[英]How to make a secure game in javascript?

我正在使用javascript一些html和css进行游戏,我想知道是否有任何方法来保护游戏,以便用户不能只是调用game.php?result = victory来完成游戏并获得一些积分。

截至目前,这是我的解决方案。

  • 对于一个机会游戏,启动页面结果已经到位,赢或松,然后只是做一些动画来显示它,但所有得分和赢/松的东西都是在服务器端完成的。

  • 对于战斗游戏,只需从javascript调用中获取操作,并进行损坏计算,服务器上的操作员的反应,然后发送回数据。

但最后的解决方案意味着每次用户做任何事情时我都必须发送动作。 这可能适用于转弯战斗游戏,但我认为对任何其他类型的游戏都会放慢速度。 所以我的问题是,是否有某种安全的方式我可以准备我的JavaScript来保护发送的信息。

使其安全的唯一方法是在服务器端进行所有计算和验证。 这就是几乎所有在线游戏的完成方式。 客户端永远不可信任在线通信,您必须始终确保在服务器端用户实际上正在做有效的事情。 (理论上无论如何,在实践中你必须相信客户端有点滞后补偿并将一些非关键的东西卸载到客户端)。

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

就像你说的,你总是可以在javascript中使用界面,但为了安全起见,你仍然需要在服务器端执行大量的工作,这肯定不适用于需要更多操作导向控制的游戏。 因此,如果您需要安全性,那么您几乎只能使用基于回合的游戏。

你可以做一些事情来阻止天真的用户,但可能不是每个人。 这一切都取决于这个人如何“攻击”你的游戏。 在一天结束时,用户可以使用javascript调试器来查看您的代码正在做什么,并复制它。 即使你发回每个游戏动作,用户仍然可以复制它。 如果您不注意用户可以执行的操作,他们可能能够发回如果他们使用默认控制方案控制游戏则无法执行的操作。

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

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

这会被视为一种选择吗? (迟到的答案)

将关键(你不想被黑客攻击的东西)转移到一个隐藏的内部flash播放器,它既可以作为关键变量存储,计算器(例如:生命点),也可以作为此类游戏数据的“通信器”。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM