[英]Javascript Security Concern
在我之前的问题中: Securing javascript game timing
... 很明显,Javascript/Canvas 游戏中的客户端计时根本不安全。 我知道不信任客户的口头禅——这首先是导致我挣扎的原因。 :-)
因此,如果我确实将所有时间转移到服务器并处理它,这是一个后续问题。 游戏显然需要在提交之前完成。 由于游戏拼图全是Javascript,这就引入了操纵客户端代码来伪造游戏完成的问题。
我在单独的 class 文件中创建了游戏 JS 代码。 如果我这样实例化游戏:
var game;
$document.ready(function(){
game = new Game();
});
...然后,我可以通过控制台访问“游戏”object 及其所有方法和变量。
但是,如果我这样做:
$document.ready(function(){
var game = new Game();
});
...然后我无法通过控制台访问“游戏”object。 这似乎有帮助,但有什么我不知道的 - 这个 object 是否仍然可以以某种我不知道的方式访问,或者在 function 中使其成为私有变量更安全一些?
谢谢!
不必太在意控制台。 是的,如果某些全局对象的方法可以轻易触发以“赢得”游戏,则很可能会作弊,但正如您所演示的那样,可以很容易地防止它。
因此,黑客只会侦听(查看网络窗格)向您的服务器发出的请求,然后手动将其触发。 如果它们只是一些简单的网址,例如/action=start
和/action=end
,那么他可以很容易地手动触发它们而无需任何时间。 因此,您将需要防止这种情况的发生(尽管您永远无法真正确保它的安全),例如通过添加其他凭据令牌。 或者,您可以在游戏代码中嵌入一些“秘密”,这些秘密会在游戏过程中显示出来,并需要发送到服务器以证明其合法性。 当然可以从您的代码中读取它们,但是对于黑客来说 ,您必须使其变得过于复杂 。 有点像是默默无闻的安全 ……
注意:在这样的系统中还有许多其他的安全考虑和攻击向量。 这个答案只是试图回答这里提出的具体问题。
这取决于浏览器及其开发工具提供的内容。 大多数浏览器的开发工具提供以下功能:
在任何时间点暂停执行 JavaScript 并使用调试器接口。
const
,甚至可以将变量重新分配给新用户-创建了 object 的实例。浏览 JS 文件并在其中设置断点。
检查 HTML 元素上的事件侦听器并在它们上设置断点。
甚至还有记录JS堆memory的工具。 要筛选的数据很多,但基本上都是JS 堆上的所有数据(只读)。
鉴于这些浏览器功能(以及用户可以使用他们希望使用的任何浏览器的事实),不可能在客户端 100% 地“保护”任何东西。 这是一场失败的战斗。 如果你想像游戏一样玩它,你可以尽力而为。
Object.freeze
和朋友。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.