如何检测到用户正在通过控制台发送命令?

时间:2019-04-30 10:20:14

标签: javascript google-chrome-devtools

我正在制作浏览器游戏,如果他通过控制台编写脚本,我想阻止他。如何正确检测到该用户正在使用控制台发送脚本?

我正在寻找解决方案,但仍不确定。我看到您可以通过CSP进行检测。

谢谢

2 个答案:

答案 0 :(得分:0)

这将非常复杂,但是从理论上讲,您可以确保所有代码执行都在通过匿名函数定义的范围内进行。 这样,通过控制台执行的所有内容都将在不同的范围内(这是默认范围),并且您可能会将代码添加到所拥有的每个公用函数中,并从中检查执行该代码的位置。 但同样,用户可以完全控制浏览器。

我了解到您在玩游戏时注意到了这一点。例如,http://agar.io使用这种隔离范围技术来避免用户篡改游戏值。这并非万无一失,因为精明的用户仍可以尝试代码注入代码以添加句柄以暴露代码的内部片段。

尽管可以实施一些技巧,以使用户更加困难(请参阅https://x-c3ll.github.io/posts/javascript-antidebugging/

答案 1 :(得分:0)

Works for 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函数中打开了控制台