我正在制作浏览器游戏,我想阻止用户,如果他是通过控制台脚本。如何正确检测用户正在使用console发送脚本?
我一直在寻找解决方案,但我仍然不确定。我看到你可以通过CSP检测到它..
谢谢
发布于 2019-04-30 18:28:16
这将非常复杂,但从理论上讲,您可以确保所有代码执行都发生在您通过匿名函数定义的作用域中。这样,通过控制台执行的所有内容都将在不同的作用域中(这是默认作用域),并且您可能会将代码添加到您拥有的每个公共函数中,您可以在其中检查代码执行的位置。但同样,用户拥有对浏览器的完全控制。
我读到你在玩游戏时注意到了这一点。例如,http://agar.io使用这种隔离范围技术来避免用户篡改游戏值。这不是万无一失的,因为精明的用户仍然可以尝试代码注入您的代码,以添加句柄来公开您的代码的内部片段。
但是,您可以实现一些技巧来使用户更加困难(参见https://x-c3ll.github.io/posts/javascript-antidebugging/)。
发布于 2019-04-30 18:43:56
适用于Chrome
下面是我最喜欢的来自earlier answer的解决方案
setInterval(() => {
var element = new Image();
Object.defineProperty(element, 'id', {
get: function() {
// behaviour to execute when the console is open
console.log('open', new Date());
}
});
console.log(element); // trigger
}, 2000);
每隔2秒(或者无论您如何初始化时间间隔),您都会知道控制台是否在get函数中打开
https://stackoverflow.com/questions/55918838
复制相似问题