Comment puis-je tromper un site qui regarde l'objet JavaScript 'navigator' pour voir que je ne suis pas sur Windows?

J'essaie de parcourir un site Web, mais il fonctionne uniquement sous Windows et Mac car ils utilisent le navigator.platform de JavaScript pour découvrir l'architecture sur laquelle je cours. Bien sûr, ils utilisent également l'agent utilisateur du navigateur, mais cela a été facile à falsifier.

Voici les .js en question: http://pastebin.com/f56fd608d . Le code responsable de la détection du navigateur est en haut. Existe-t-il un moyen de modifier le fichier .js avant que le site ne s'exécute, ou quelque chose de similaire, afin que je puisse éliminer le contrôle?

Utilisation de la console JavaScript:

>navigator.platform
Linux i686

Évidemment, j'ai changé l'agent utilisateur du navigateur, mais navigator.platform ne semble pas prendre sa valeur de l'agent utilisateur.

Peut-être que quelqu'un sait comment changer la valeur renvoyée par navigator.platform , car je déteste exécuter Windows sous VirtualBox pour utiliser ce site.

EDIT: Cela pourrait être intéressant car les utilisateurs de Linux peuvent être refusés artificiellement l'accès aux sites Web et ne peuvent rien en faire.

Comme vous ne pouvez pas définir directement navigator.platform , vous devrez être sournois – créez un objet qui se comporte comme navigator , remplacez sa platformplatform , puis configurez le navigator .

 var fake_navigator = {}; for (var i in navigator) { fake_navigator[i] = navigator[i]; } fake_navigator.platform = 'MyOS'; navigator = fake_navigator; 

Si vous exécutez ce code avant le chargement du document (en utilisant GreaseMonkey, un addon ou une extension Chrome), la page affichera navigator.platform comme "MyOS" .

Note: testé uniquement dans Chrome.

 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); } 

À propos de: config -> general.platform.override

Pour un navigateur basé sur Mozilla, GreaseSpot / Code Snippets # Hijacking les propriétés du navigateur démontre comment il peut être fait. Ce code peut être injecté à partir d'un script GreaseMonkey .

À condition que le navigateur que vous utilisez supporte Object.defineProperty() (il est probable), une façon plus moderne d'atteindre le même objectif est la suivante:

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

Cela vous permet de le configurer à n'importe quelle valeur personnalisée que vous souhaitez, et vous permet également de la modifier autant de fois que vous le souhaitez sans avoir besoin de recharger la page.

En essayant de modifier cette propriété (à tout moment) dans les rendements de Firefox:

Erreur: définir une propriété qui n'a qu'un getter

Fichier source: index.html

Ligne 1

Je pense donc que vous allez avoir du mal.

J'essayerais de contacter l'auteur pour obtenir un correctif.