Comment faire pour désactiver la fonction JavaScript, des appels à partir du navigateur de la console?
Je travaille sur une application web en HTML/JavaScript, et je souhaitez empêcher les utilisateurs de l'appel de fonctions dans leur navigateur de la console afin d'éviter toute tricherie. Toutes ces fonctions sont contenues dans un fichier unique appelé functions.js
qui est chargé dans la tête de la index.html
fichier.
Après une recherche sur le web j'ai trouvé cette solution, qui fonctionne très bien sous Google Chrome, mais il est inefficace dans d'autres navigateurs tels que Firefox:
var _z = console;
Object.defineProperty( window, "console", {
get : function(){if( _z._commandLineAPI ){ throw "Script execution not permitted" } return _z; },
set : function(val){ _z = val }
});
Est-il une manière générale, pour désactiver les fonctions d'appel à partir de la console? Cela dépend-il du navigateur ou est-ce juste un problème de délimitation de l'étendue ou peut-être quelque chose d'autre que j'ai ignoré?
Ce que vous avez trouvé n'désactiver le
console
objet de votre script, mais ne l'empêchera pas les utilisateurs à utiliser le navigateur de la console.Quoi que vous fassiez dans un navigateur, l'utilisateur peut l'annuler. Vous ne pouvez pas cacher quoi que ce soit, et quelle que soit vous désactivez l'utilisateur peut activer de nouveau. Je ne suis pas sûr de ce que la "tricherie", vous essayez d'éviter, mais le faire côté client ne seront pas fiables.
Javascript est un client à côté de la technologie. Ils seront toujours être capable de manipuler le côté client. C'est pourquoi aucune authentification n'est jamais fait purement côté client.
assurez-vous juste qu'il n'y a pas de point faible dans votre js. pour être précis, ne pas utiliser de variables globales, encapsuler le tout dans une closure, rapetisser votre fichier js afin de rendre plus difficile l'arrière-ingénieur. si vous êtes préoccupé de ce que les utilisateurs peuvent utiliser js pour parler de votre serveur et de tricher, vous devriez lire sur les autorisations.
OriginalL'auteur lello | 2013-10-07
Vous devez vous connecter pour publier un commentaire.
Pas. il n'y a pas:
Jamais.et Bien, apparemment, Facebook a trouvé une façon de Google Chrome pour le faire: Comment Facebook désactiver le navigateur intégré d'Outils de développement? - si, je le considère comme un bug 🙂Oui. JavaScript est exécuté côté client, et le client a le plein pouvoir sur elle. Il a la possibilité de choisir ou de ne pas l'exécuter, la façon de l'exécuter et de le modifier comme il le souhaite avant de l'exécuter. Modernes, les outils de développement permettent à l'utilisateur d'exécuter des commandes arbitraires fonctions arbitraires étendues lors du débogage d'un script.
Vous pouvez le rendre plus difficile à l'introspection et à l'utilisation (appel) votre code en évitant d'exposer vos méthodes dans le contexte global, et en ôtant (minifying) la source. Cependant, ne faites jamais confiance le client. Pour éviter toute tricherie, vous aurez à effectuer toutes les tâches essentielles sur le serveur. Et ne vous attendez pas à toutes les demandes à venir à partir de votre code JavaScript à partir d'un navigateur; vous aurez besoin pour gérer arbitraire des demandes qui pourraient être émis par une sorte de bot.
Que voulez-vous dire exactement par "facebook de la console", l'ouverture de votre navigateur devtools de la console sur facebook.com? Ce ne serait pas travailler là-bas? Quel navigateur utilisez-vous, qu'avez-vous taper?
Je vois ce que tu veux dire maintenant. Comment fonctionne Facebook désactiver les Outils de développement?
OriginalL'auteur Bergi
Plutôt que d'éliminer l'accès à la console, juste votre code javascript afin de ne pas polluer l'espace de noms global. Il sera beaucoup plus difficile (ou dans les cas simples pratiquement impossible) pour le code exécuté à partir de la console ou de la barre d'adresse pour l'exécution de votre code: https://stackoverflow.com/a/1841941/1358220
Il est également intéressant de noter, si vous avez un peu de code que vous souhaitez attribuer à l'utilisateur de ne pas être en mesure de modifier ou exécuter, le déplacer vers le serverside et seulement exposer le résultat pour le client. Vous êtes en train d'essayer de corriger une mauvaise conception du design avec un mauvais codage de la décision. Améliorer votre conception et de la mise en œuvre prendra soin de lui-même.
Aye c'est pas parfait, mais depuis qu'il n'est pas en citant le code qu'il cherche à "protéger", une clôture est potentiellement moins offensif solution que de paralyser la console.
Assez facile de simplement modifier la source dans les outils de dev.
Par ce calcul modifier le code pour le rétablissement de la console aurait le même problème. Comme @Bergi dit, il n'y a AUCUN moyen de faire ce qu'il demande, donc, ma suggestion est juste un peu plus attrayant technique pour atteindre la plus proche qu'il pourrait l'obtenir 🙂
OriginalL'auteur Bob Davies
Minify votre source JavaScript pour dissimuler le sens. Il ne le fera pas impossible de tricher, mais vraiment dur de trouver des moyens de tricher.
OriginalL'auteur lordvlad
OriginalL'auteur Pranay Soni
Si vous voulez éviter de "tricherie", vous aurez besoin de serveur-côté de vérification de la saisie de l'utilisateur. Le client ne peut envoyer les informations de serveur selon l'une côté serveur protocole défini, et donc la tricherie est impossible, à moins que votre protocole de fuites de sécurité (et la plupart des protocoles, en particulier les nouveaux protocoles).
Sandbox comme le Facebook API, Google Caja et plus vous permettent, de façon arbitraire, de faire respecter toutes les contraintes par "ré-écriture" de la langue (ils courent un analyseur sur le fond et a re-compiler fournis par l'utilisateur code et de faire tout ce qui est dangereux en toute sécurité).
Cela fonctionne tant que vous pouvez vous assurer que le code d'utilisateur ne peut exécuter à l'intérieur de ces milieux. De cette façon, le code d'autres utilisateurs ne peuvent pas mess avec votre client, mais vous pouvez bien sûr toujours le désordre de votre propre client.
OriginalL'auteur Domi