现在,在HTML5中已经有了一些经典平台甚至3D fps游戏的简洁的画布演示,下一步可能是尝试开发一个多人HTML5游戏。HTML5套接字支持使这种相对直截了当,但是在浏览器中的任何人都可以看到客户端源代码的情况下,为HTML5 5前端多用户游戏的基本游戏安全特性提供了哪些解决方案??例如能够防止伪造的高分提交。
发布于 2010-06-05 03:33:28
简单的答案是:您不能信任客户端的数据,这意味着高分提交不能来自客户端。
由于代码客户机可供任何人检查,因此无法信任客户端发送给您的服务器的数据。即使您用每个用户的加密密钥加密数据(这是可能的),用户也可以简单地在浏览器中修改您的代码并更改它发送给服务器的值。
由于您的游戏是多人游戏,如果服务器生成所有得分事件,这可能是可能的。如果服务器生成所有得分事件,客户端就不会向服务器发送得分数据,这意味着高分数据不能伪造。
你还得对付作弊,这更有挑战性,但这是另一个问题.
发布于 2012-09-19 01:53:00
加上拉里的话,你肯定要处理后端的得分,以真正防止作弊/假记分。
作为实践中的一个例子..。游戏字战是一个游戏,你可以从一个4x4的字母网格中找到尽可能多的单词。
在每个游戏的开始,一个4x4板是生成服务器端。生成该板的可能单词列表,并将每个单词的散列版本(带有随机盐的MD5‘d)以及salt传递给客户端。
在客户端,当键入字母并按下enter键时,我们将输入的单词(使用来自服务器的salt )进行md5,并根据服务器提供的散列单词列表检查该单词。如果匹配,我们用新的分数更新客户端(有一个基于所用字母及其点数的函数)。
游戏结束后,客户端将他们想出的单词列表发送给服务器(而不是得分),服务器再次检查这些单词是否存在于板子中,并处理得分。
这就是我工作的Clay.io公司进来的地方。Clay.io提供了一个用于高级HTML5游戏特性的API,如主板、成就、支付处理等。不用说,我们需要一个解决方案的游戏,有后端,使某些事情,如高分更安全。
解决方案是使用JWT (JSON )加密后端上的JavaScript对象(node.js,php,不管怎样),并传递加密对象而不是得分本身。这让我们可以以两种方式进行交流(游戏-> Clay.io和Clay.io ->游戏),而且做起来非常轻松。完整的文档在这里: clay.io/ docs /encryption (最大链接点击这个答案)
回到战争..。从服务器生成带有用户得分的JWT,并将其传递给Clay.io以发布分数。瞧:)
当然,这将随着你正在开发的游戏类型的不同而不同,但故事的寓意是你必须要有创造性:)
我写了一篇博文,更详细地介绍了HTML5游戏安全性。HTML5游戏开发技巧系列的第3部分。
https://stackoverflow.com/questions/2978976
复制相似问题