停止用户's从控制台执行JavaScript
Stop user's executing JavaScript from console
我一直在尝试使用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客户端来说更是如此,因为它更容易。正如我在我的评论中所说,有很多方法可以阻止或使它变得更难。我张贴更多的建议
- 混淆javascript代码
- 使用加密方法并在使用密钥发送之前加密所有向服务器发送的请求(使其难以找到密钥)
- 在服务器端使用与javascript客户端相同的加密方法和密钥解密请求。
我们所说的不信任来自客户端的东西是指在创建表单时所做的事情。您通常检查post方法,会话,与您发送的有意义的数据无关的唯一令牌-通常是在服务器端创建的隐藏文本输入,并在提交表单时检查。搜索验证和清理表单。最重要的是,你应该加密发送的数据,这样就不可能使用chrome或firebug上的网络选项卡甚至是适当的流量分析器来重建结构。
相关文章:
- 控制台.log触发,但随后的 Jquery 调用不执行任何操作
- 执行JavaScript代码,使用selenium webdriver或WatiN从控制台获取日志
- 如何指定在执行控制台时要显示的属性.log对象
- 函数将信息返回到控制台日志,但实际上并没有执行应有的操作
- Javascript未执行.没有控制台错误,没有验证错误
- 量角器 - 如何在输出文本文件中生成执行报告或显示控制台.log消息
- 控制台.log在 AngularJS 中执行作用域函数
- QT:Javascript执行缓慢(除非我登录到控制台)
- 如何在页面加载时执行控制台 Javascript
- 如何通过 ajax 单击时从 javascript 文件执行节点(控制台)命令
- 不同浏览器的控制台语句的执行顺序
- Firefox控制台错误:试图在清除的范围内运行编译并执行脚本
- 如何在浏览器中使用F12控制台在javascript中每隔一段时间执行一次
- 如何将node-js控制台应用程序打包为可执行文件
- 是否有可能在javascript执行中写入mongodb控制台
- 从谷歌Chrome控制台调试的最佳方式.js文件,如果它被加载和执行后按钮被点击
- JavaScript似乎加载到DOM中,但直到在chrome控制台运行才执行
- 如何在Chrome中检测javascript是从文档/扩展或javascript控制台执行的
- 停止用户's从控制台执行JavaScript
- 如何检测脚本是否直接从节点控制台执行