Как я могу обмануть сайт, который смотрит на "навигатор" 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 может быть искусственно отказано в доступе к веб-сайтам, и он ничего не может с этим поделать.
Ответы
Ответ 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
Ответ 4
Для браузера на основе Mozilla GreaseSpot/Code Snippets # Устранение свойств браузера показывает, как это можно сделать. Этот код можно ввести из GreaseMonkey script.
Ответ 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
Итак, я думаю, вам будет тяжело.
Я попробую связаться с автором о получении исправления.