Подтвердить что ты не робот

Как я могу обмануть сайт, который смотрит на "навигатор" JavaScript-объекта, чтобы увидеть, что я не в Windows?

Я пытаюсь просмотреть веб-сайт, однако он работает только под Windows и Mac, потому что они используют navigator.platform из JavaScript, чтобы узнать, в какой архитектуре я работаю. Конечно, они также используют пользовательский агент браузера, но это было легко подделать.

Вот вопрос .js: http://pastebin.com/f56fd608d. Код, отвечающий за обнаружение браузера, находится наверху. Есть ли способ изменить файл .js перед запуском сайта или что-то подобное, поэтому я могу устранить проверку?

Использование консоли JavaScript дает:

>navigator.platform
Linux i686

Очевидно, я изменил пользовательский агент браузера, но navigator.platform, похоже, не принимает его значение от пользовательского агента.

Возможно, кто-то знает, как изменить значение, возвращаемое navigator.platform, потому что я ненавижу запуск Windows под VirtualBox для использования этого сайта.

EDIT: Это может представлять интерес, поскольку пользователям Linux может быть искусственно отказано в доступе к веб-сайтам, и он ничего не может с этим поделать.

4b9b3361

Ответ 1

Поскольку вы не можете напрямую установить navigator.platform, вам придется скрываться - создайте объект, который ведет себя как navigator, замените его platform, а затем установите для него navigator.

var fake_navigator = {};

for (var i in navigator) {
  fake_navigator[i] =  navigator[i];
}

fake_navigator.platform = 'MyOS';

navigator = fake_navigator;

Если вы выполняете этот код перед загрузкой документа (используя GreaseMonkey, аддон или расширение Chrome), страница будет видеть navigator.platform как "MyOS".

Примечание: проверено только в Chrome.

Ответ 2

var fakePlatformGetter = function () {
  return "your fake platform";
};
if (Object.defineProperty) {
  Object.defineProperty(navigator, "platform", {
    get: fakePlatformGetter
  });
} else if (Object.prototype.__defineGetter__) {
  navigator.__defineGetter__("platform", fakePlatformGetter);
}

Ответ 3

about: config → general.platform.override

Ответ 5

При условии, что используемый вами браузер поддерживает Object.defineProperty() (вероятно, это так), более современный способ достижения той же цели состоит в следующем:

Object.defineProperty(navigator, 'platform', {
  value: 'my custom value',
  configurable: true // necessary to change value more than once
});

Это позволяет вам установить любое пользовательское значение, которое вы хотите, а также позволяет изменять его столько раз, сколько вы хотите, не перезагружая страницу.

Ответ 6

Попытка изменить это свойство (в любое время) в Firefox дает:

Ошибка: установка свойства, имеющего только getter

Исходный файл: index.html

Линия: 1

Итак, я думаю, вам будет тяжело.

Я попробую связаться с автором о получении исправления.