2

我一直在使用 HTML5 技术创建一个小型多人游戏。我使用 Node.js 和 Socket.IO 来管理服务器端业务。

我的问题在于用户能够通过 Chrome 控制台(当然还有其他各种控制台)输入他们自己的 JavaScript。例如,用户可能会在控制台中输入以下内容:

socket.emit("new player", {user: username, x: localPlayer.getX(), y: localPlayer.getY()});

这将为游戏增加一个新玩家。我应该停止这种情况的最佳方法是什么?有没有办法可以捕获这些条目并简单地拒绝它们(然后拍打用户的脸)?如果我可以通过更改变量来阻止他们编辑 GUI 之类的东西,那也很好,例如:

gameStatus = "trolled lol troll client-side editing lol";

谢谢,乔尔

4

3 回答 3

12

你不能这样做。

你永远不能相信来自客户的任何东西。
即使您可以通过您的页面以某种方式影响控制台,攻击者也可以编写自己的 Web 浏览器(阅读:fork Chromium)并绕过您的限制。
或者攻击者可以在没有任何浏览器的情况下简单地手工制作 HTTP 请求。

相反,您需要验证服务器上的所有内容。
每当任何客户端做某事时,服务器都需要检查该客户端是否真的被允许这样做。

于 2013-05-19T18:45:40.690 回答
0

正如 SLaks 所指出的,没有办法阻止某人进行黑客攻击,对于 javascript/html 客户端来说更是如此,因为它更容易。正如我在评论中所说,有一些方法可以阻止或使其更难。我正在发布更多建议

  1. 混淆你的javascript代码
  2. 使用加密方法并在使用密钥发送之前加密所有对服务器的请求(使其难以找到密钥)
  3. 使用与 javascript 客户端相同的加密方法和密钥在服务器端解密您的请求。
于 2013-05-19T19:07:51.093 回答
0

我们所说的不信任来自客户端的内容的意思是在创建表单时所做的正是您所做的。您通常检查 post 方法、会话、与您发送的有意义数据无关的唯一令牌 - 通常是在服务器端创建并在提交表单时检查的隐藏文本输入。搜索验证和清理表格。最重要的是,您应该加密要发送的数据,这样就无法使用 chrome 或 firebug 上的网络选项卡甚至是适当的流量分析器来重建结构。

于 2013-05-20T10:43:08.377 回答