在JS中是否有可能从浏览器的控制台中检测是否运行了任何JS ?

Is it possible in JS to detect whether any JS was run from the browser's console?

本文关键字:是否 JS 运行 检测 任何 浏览器 有可能 控制台      更新时间:2023-09-26

我正在制作一款JavaScript游戏,我不希望有人作弊。是否有任何方法,我可以检测,并可能记录,命令问题在JavaScript控制台?我要寻找的框架是这样的:

consoleCommands = "";
window.console.command = function ( thiscmd ) 
{
   consoleCommands += thiscmd;
}
window.onbeforeunload = function ( )
{
    // send log of commands to server
    $.ajax({url:'recordNewCommandLog',method:'POST',data:{cmdlog:consoleCommands}});
};
当然,攻击者可以覆盖它,但是我将尝试使其足够模糊,使攻击者很难首先发现他的命令正在被记录。

除了您收到的答案(和重复链接)之外,我希望您考虑以下问题:

你为什么在乎别人作弊?

  • 如果是单人游戏,就让他们作弊吧,他们只会欺骗自己,你无法阻止他们。如果您阻塞了控制台,它们将使用用户脚本。如果你阻止它,它们将使用内存修改程序(如CheatEngine)并从那里更改值。
  • 如果这是一款多人游戏,那么在反作弊方面进行投资是有意义的,这样他们就不会破坏其他所有人的体验。在这种情况下,让服务器做出所有重要的决定。不要相信客户端的任何话服务器应该是安全的,服务器应该能够告诉玩家不可能从怪物掉落中获得9999999钱,只是因为它这么说。
更不用说,如果没有控制台,您将如何进行调试?你将很难重现bug和修复问题。

TL;博士

不要阻塞控制台。如果适用的话,保护您的服务器并让客户端"可被攻击"——无论如何,客户端是用户的域,而不是您的域。

var arr = [];
console.log = function () {
  arr.push([].slice.call(arguments));
  // if `arr.length` , do stuff
  return console.log
}