停止用户's从控制台执行JavaScript

Stop user's executing JavaScript from console

本文关键字:控制台 执行 JavaScript 用户      更新时间:2023-09-26

我一直在尝试使用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";

谢谢,乔尔。

你不能这么做。

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

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

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

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

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