HTML5多人游戏安全解决方案

时间:2010-06-05 03:13:08

标签: security html5 canvas multiplayer

现在HTML5中有经典平台甚至3D fps游戏的几个简洁的画布演示,下一步可能是尝试开发多人HTML5游戏。 HTML5套接字支持使这一点相对简单,但是浏览器中的任何人都可以查看客户端源代码, HTML5前端多用户游戏的基本游戏安全功能的解决方案 - < em>比如能够防止伪造的高分提交?

2 个答案:

答案 0 :(得分:16)

简单的答案是:您无法信任来自客户端的数据,这意味着高分提交不能来自客户端。

由于代码客户端可供任何人检查,因此无法信任客户端发送服务器的数据。即使您使用每用户加密密钥(这是可能的)加密数据,用户也可以简单地在浏览器中更改您的代码并更改它发送到服务器的值。

由于您的游戏是多人游戏,因此如果服务器生成所有评分事件,这可能是可能的。如果服务器生成所有评分事件,则客户端永远不会将评分数据发送到服务器,这意味着高分数据不能伪造。

你仍然需要处理作弊,这更具挑战性,但这是另一个问题......

答案 1 :(得分:4)

除了Larry所说的,你肯定要在后端处理得分以真正防止作弊/假分数发布。

在实践中有一个这样的例子......游戏Word Wars是一个博格式游戏,你可以从4x4字母网格中找到尽可能多的单词。

在每场比赛开始时,服务器端会生成一个4x4板。生成该板的可能单词列表,并将每个单词以及盐的散列版本(带有随机盐的md5)传递给客户端。

在客户端,当键入字母并按下回车键时,我们md5(使用服务器中的salt)输入的单词,并根据服务器提供的散列单词列表进行检查。如果它匹配,我们用新分数更新客户端(有一个基于所用字母和它们的点值的函数)。

游戏结束后,客户端会将他们提出的单词列表发送到服务器(而非分数),服务器会仔细检查单板中是否存在这些单词,并处理评分。

这就是我正在工作的公司Clay.io所在的地方.Clay.io为排行榜,成就,支付处理等高级HTML5游戏功能提供API ...不用说,我们需要具有后端的游戏解决方案可以使高分等特定内容更加安全。

解决方案是使用JWT(JSON Web令牌)加密后端(node.js,php,等等)上的JavaScript对象,并传递加密对象而不是得分本身。这让我们可以通过两种方式进行交流(游戏 - &gt; Clay.io和Clay.io - &gt;游戏),并且非常轻松。关于此的完整文档在这里: clay.io/docs/encryption (最大链接点击此答案)

回到Word Wars ...从服务器我们使用用户的分数生成JWT并将其传递给Clay.io以发布分数。沃伊拉:)

当然,这会有所不同,因为你正在开发的游戏类型不同,但故事的寓意是你必须要有创意:)

我写了一篇博文,更详细地介绍了HTML5游戏的安全性。 Part 3 of a series on HTML5 Game Development Tips