“浏览器游戏的未来”有多安全?

10

预测认为,HTML5将被广泛采用作为设计游戏的一种方式。但我对此有疑问:在线HTML5游戏如何才能保证安全

让我举个例子:想象一下这样一个平台游戏,你在赢得例如非常难的关卡后会获得徽章。当你真正赢得了这个徽章时,需要向服务器发出一个请求来更新你的在线资料。对于一个黑客来说,是不是非常简单就可以发送这个请求并获得徽章,而无需真正玩游戏呢?因为:

  • 客户端源代码是可见的,不可能隐藏
  • 可以从命令行执行Javascript

我看不出有什么方法可以防止这个黑客获得他的徽章...有没有任何方法可以使这个游戏变得更加安全?


Flash游戏也有同样的问题。相关(Flash):https://dev59.com/ykbRa4cB1Zd3GeqPzVaD - Pekka
2
我不认为它本质上与桌面甚至是游戏机游戏有任何不同。 - aib
1
@aib,本质上的区别在于数据是从服务器发送和接收的,这些数据很容易被窃听。 - Pekka
所有游戏都存在这个问题。仅仅因为一个游戏被编译成字节码或机器码并不会阻止对其完整性的攻击。任何服务器无法直接、全面和独占控制的东西,都是容易受到攻击的。Valve 必须花费大量时间和精力在他们的游戏中开发 "Valve 反作弊" 系统,原因就是它在防御永远无法完全和永久地击败的东西。 - Nicholas Knight
1
@Pekka和其他人:非常好,谢谢!这足够让我阅读了。我没想到所有游戏都有这个问题! - Harmen
显示剩余4条评论
3个回答

4
是的,如果您设计的游戏是这样的,那么它将非常容易被黑客攻击。但为什么这个问题只针对HTML5?您可以使用任何类型的游戏编写这样的游戏。即使是本机桌面游戏,您仍然可以伪造请求。唯一的区别是伪造HTTP请求比反向工程桌面游戏发出的请求更容易。
解决方案是在胜利中添加某种“验证” - 实际算法因游戏而异。也许在用户玩游戏时让服务器跟踪游戏进度。例如,如果是象棋游戏,您可以将每个移动发送到服务器,并验证移动以确保它们正确运行。但是,实时游戏会变得更加复杂。
但无论您决定使用哪种算法,都将被打败。甚至我刚提到的象棋验证也可以被绕过:您可以“创建”自己的有效象棋游戏,并每次发送相同的移动到服务器,从而确保游戏有效。 (这假设玩家与计算机对抗-让两个人类彼此对抗会使事情变得更容易。)

好的,谢谢......在这个国际象棋游戏中,如果计算机充当裁判员,接收棋步、检查其是否有效以及检查当前游戏是否是某一玩家的胜利,那么就会更加安全。但是,对于基于平台的游戏来说,构建这样一个裁判员则更加困难...... - Harmen
@Harmen:没错,这就是为什么大公司会花费数十万美元来阻止黑客攻击他们的游戏。这并不容易。而且你的反作弊机制越复杂和强大,它就越昂贵:使用更多的服务器资源,占用更多的时间等等。 - Sasha Chedygov

2

这与任何基于Flash的游戏或像《魔兽世界》这样的可下载客户端游戏没有什么区别。与游戏公平性有关的任何核心问题都必须在服务器上处理。


哦,非常正确。这自从多人游戏出现以来就一直是个问题。提到《魔兽世界》,让我想起了2007年的软件工程广播节目中的一集。可以跳到20分钟处收听:http://www.se-radio.net/2007/08/episode-66-gary-mcgraw-on-security/ - Cheekysoft

1
HTML5可以更加安全的一种方法是您可以随时更改它。因此,假设您有一个AJAX调用来向用户提供奖励,您可以定期更改此调用的签名,以便“作弊”将不再起作用。请确保跟踪仍在使用旧API的玩家,并对使用作弊的玩家进行惩罚。
不,这并不能解决所有问题,最精明的玩家会有办法绕过这个问题(取决于您的更改有多复杂),但它确实提供了一些应对措施,特别是如果您的游戏需要大量投资。如果玩家觉得有被抓住的可能性,他们可能不愿冒险失去进度。只需确保您有清晰的行为准则,详细说明作弊的惩罚。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接