我一直在努力创造一个使用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";
谢谢, 乔尔
答案 0 :(得分:12)
你永远不会相信来自客户的任何东西
即使您可能以某种方式影响您的页面控制台,攻击者也可以编写自己的Web浏览器(读取:fork Chromium)并绕过您的限制。
或者攻击者可以在没有任何浏览器的情况下简单地手工处理HTTP请求。
相反,您需要验证服务器上的所有内容 每当任何客户端做某事时,服务器都需要检查该客户端是否真的被允许这样做。
答案 1 :(得分:0)
正如SLaks所指出的那样,没有办法阻止某人进行黑客攻击,对于javascript / html客户端来说更是如此,因为它更容易。正如我在评论中所说,有些方法可以阻止或使其变得更难。我发布了更多建议
答案 2 :(得分:0)
我们的意思是不信任来自客户端的内容正是您在创建表单时所做的。您通常会检查post方法,会话,与您要发送的有意义数据无关的唯一令牌 - 通常是在服务器端创建的隐藏文本输入,并在提交表单时进行检查。搜索验证和消毒表格。除此之外,您应该记录发送的数据,这样就无法使用chrome或firebug上的网络选项卡甚至是适当的流量分析器来重建结构。