Как я могу определить, что пользователь отправляет команды через консоль? - PullRequest
0 голосов
/ 30 апреля 2019

Я делаю браузерную игру и хочу заблокировать пользователя, если он пишет через консоль.Как я могу правильно определить, что пользователь использует консоль для отправки скриптов?

Я искал решение, но все еще не уверен.Я видел, что вы можете обнаружить его через CSP ..

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Работает для Chrome

Вот мое любимое решение из более раннего ответа :

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
0 голосов
/ 30 апреля 2019

Это было бы сильно усложнено, но теоретически вы могли бы убедиться, что все выполнение кода происходит в области, которую вы определяете через анонимную функцию. Таким образом, все, что выполняется через консоль, будет находиться в другой области видимости (которая является областью по умолчанию), и вы потенциально можете добавить код к каждой общедоступной функции, которая у вас есть, где вы проверяете, откуда этот код выполняется. Но опять же, пользователь имеет полный контроль над браузером.

Я читал, что вы заметили это, играя в игру. Например, http://agar.io использует эту изолированную технику, чтобы пользователь не мог вмешиваться в игровые значения. Это небезопасно, поскольку опытный пользователь все еще может попытаться ввести код, внедрить ваш код, чтобы добавить дескрипторы для раскрытия внутренних частей вашего кода.

Хотя вы можете реализовать некоторые приемы, чтобы сделать его более сложным для пользователя (см. https://x -c3ll.github.io / posts / javascript-antidebugging / )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...