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

时间:2015-10-19 21:08:58

标签: javascript jquery security

我正在制作一款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}});
};

当然,攻击者可能会覆盖它,但我会尝试对其进行模糊处理,以使他很难弄清楚他的命令是否首先被记录。

2 个答案:

答案 0 :(得分:3)

除了您收到的答案(以及重复的链接)之外,我还要您考虑一下:

你为什么关心被骗的人?

  • 如果是单人游戏,让他们作弊,他们只会欺骗自己,你就无法阻止他们。如果您阻止控制台,他们将使用用户脚本。如果阻止它,他们将使用内存更改程序(如CheatEngine)并从那里更改值。
  • 如果它是一个多人游戏,那么投资反作弊是有意义的,这样他们就不会为其他人毁掉它。在这种情况下,让服务器做出所有重要的决定。 不要接受客户端的任何内容,它是服务器应该是安全的,并且它是'是服务器,它应该可以告诉玩家不能从怪物掉落中获得9999999的钱,只是因为它这样说。

更不用说,如何在没有控制台的情况下进行调试?您将很难再现错误并解决问题。

TL; DR

不要阻止控制台。保护您的服务器(如果适用)并离开客户端" hackable"无论如何,客户端是用户的域名,而不是您的域名。

答案 1 :(得分:1)

var arr = [];

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