我正在制作浏览器游戏,如果他是通过控制台编写脚本,我想阻止用户。如何正确检测用户是否正在使用控制台发送脚本?
我正在寻找解决方案,但我仍然不确定。我看到你可以通过CSP检测到它..
谢谢
它会非常复杂,但从理论上讲,您可以确保所有代码执行都发生在您通过匿名函数定义的范围内。这样,通过控制台执行的所有操作都将在不同的范围内(这是默认范围),并且您可以将代码添加到您检查执行代码的位置的每个公共函数。但同样,用户可以完全控制浏览器。
我读到你在玩游戏时注意到了这一点。例如,http://agar.io使用这种孤立的范围技术来避免用户篡改游戏价值。这并非万无一失,因为精明的用户仍然可以尝试编写代码注入代码以添加句柄以暴露代码的内部部分。
你可以实现一些技巧,使用户更难(参见https://x-c3ll.github.io/posts/javascript-antidebugging/)
这是来自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);