阻止用户从控制台执行JavaScript

时间:2013-05-19 18:42:31

标签: javascript html5 node.js socket.io

我一直在努力创造一个使用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";

谢谢, 乔尔

3 个答案:

答案 0 :(得分:12)

你做不到。

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

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

答案 1 :(得分:0)

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

  1. 模糊您的JavaScript代码
  2. 使用加密方法并在使用密钥发送之前加密您对服务器的所有请求(使密钥难以找到)
  3. 使用与javascript客户端中相同的加密方法和密钥在服务器端解密您的请求。

答案 2 :(得分:0)

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