Comment Facebook désactiver le navigateur intégré d'Outils de développement?
Donc, apparemment, en raison de la récente escroqueries, les outils de développement est exploitée par des personnes pour diffuser du spam et même utilisé pour pirater des comptes. Facebook a bloqué les outils de développement, et je ne peux même pas utiliser la console.
Comment ont-ils fait ça?? Un Débordement de Pile post affirmé qu'il n'est pas possible, mais Facebook leur a donné tort.
Il suffit d'aller à Facebook et à ouvrir les outils de développement, de type d'un caractère dans la console, et cet avertissement s'affiche. Peu importe ce que vous mettez, il ne sera pas exécuté.
Comment est-ce possible?
Ils ont même bloqué l'auto-complétion dans la console:
- Juste pour le fun : console.log = function() {}
- Avez-vous trouvé la solution pour savoir comment ils ont bloqué auto-complétion dans la console
- C'était un effet secondaire causé par le blocage de toute exécution de code à partir de la devtools.
- pouvez vous s'il vous plaît de partager le code
Vous devez vous connecter pour publier un commentaire.
Je suis un ingénieur en sécurité à Facebook et c'est de ma faute. Nous sommes en train de tester cela pour certains utilisateurs pour voir si il peut ralentir certaines attaques où les utilisateurs sont trompés en collant (malveillant) du code JavaScript dans le navigateur de la console.
Juste pour être clair: essayer de bloquer les pirates côté client est un mauvaise idée en général;
c'est pour se protéger contre une spécifique attaque d'ingénierie sociale.
Si vous vous retrouviez dans le groupe test et sont gênés par cela, désolé.
J'ai essayé de rendre l'ancienne page de désinscription (maintenant page d'aide) aussi simple que possible, tout en restant assez effrayant pour nous arrêter au moins certains des victimes.
Le code est assez similaire à @joeldixon66 du lien; le nôtre est un peu plus compliqué pour aucune bonne raison.
Chrome encapsule toutes les console de code dans
... de sorte que le site redéfinit
console._commandLineAPI
à jeter:C'est pas assez de (essayer!), mais c'est le
tour principal.
Épilogue: Le Chrome, l'équipe a décidé qu'une victoire sur la console de l'utilisateur côté JS était un bug et correction du problème, le rendu de cette technique non valide. Par la suite, une protection supplémentaire a été ajouté à protéger les utilisateurs de l'auto-xss.
console.log
.Je trouve le Facebook de la console de buster script à l'aide de Chrome developer tools. Voici le script avec des changements mineurs pour des raisons de lisibilité. J'ai supprimé les bits que je ne pouvais pas comprendre:
Avec cela, la console automatique échoue silencieusement tandis que les états tapé dans la console d'échec de l'exécution (à l'exception sera connecté).
Références:
Je ne pouvais pas le faire déclencher que sur n'importe quelle page. Une version plus robuste de ce serait faire:
De style de la sortie: Les couleurs dans la console JavaScript
Modifier Pensée @joeldixon66 a la bonne idée: Désactiver l'exécution de JavaScript, de la console « ::: KSpace :::
window.console.log = function(){//empty}
et l'utilisation de la console.journalEn plus de redéfinir
console._commandLineAPI
,il ya d'autres façons de percer dans InjectedScriptHost sur les navigateurs WebKit, afin de prévenir ou de modifier l'évaluation d'expressions conclu par le développeur de la console.
Edit:
Chrome a fixé ce, dans un communiqué. - qui doit avoir eu lieu avant février 2015, que j'ai créé l'essentiel à l'époque
Voici donc une autre possibilité. Cette fois, nous avons crochet, un niveau au-dessus, directement dans
InjectedScript
plutôt queInjectedScriptHost
contrairement à la version précédente.Qui est une sorte de gentil, comme vous pouvez directement monkey patch
InjectedScript._evaluateAndWrap
au lieu d'avoir à compter surInjectedScriptHost.evaluate
comme qui vous donne un contrôle plus fin sur ce qui doit arriver.Un autre très intéressant, c'est que l'on peut intercepter le résultat interne lorsqu'une expression est évaluée et retour que à l'utilisateur au lieu d'un comportement normal.
Voici le code qui fait exactement cela, retourner le résultat interne lorsque l'utilisateur évalue quelque chose dans la console.
C'est un peu verbeux, mais j'ai pensé que j'ai mis quelques commentaires dans il
Donc, normalement, si un utilisateur, par exemple, évalue
[1,2,3,4]
que vous attendez la sortie suivante:Après monkeypatching
InjectedScript._evaluateAndWrap
l'évaluation de la même expression, donne le résultat suivant:Comme vous le voyez la petite flèche vers la gauche, indiquant la sortie, il est toujours là, mais cette fois nous obtenons un objet. Lorsque le résultat de l'expression, le tableau
[1,2,3,4]
est représentée comme un objet avec toutes ses propriétés décrites.Je vous recommande d'essayer de l'évaluer et d'expression, y compris ceux qui génèrent des erreurs. C'est assez intéressant.
En outre, prendre un coup d'oeil à la
is
-InjectedScriptHost
- objet. Il fournit des méthodes pour jouer avec et d'obtenir un peu d'un aperçu de l'intérieur de l'inspecteur.Bien sûr, vous pouvez intercepter toutes les données et retourner le résultat original de l'utilisateur.
Il suffit de remplacer l'instruction de retour dans la trajectoire par une
console.log (res)
à la suite d'unereturn res
. Ensuite, vous finirais par le suivant.Fin de l'Edit
C'est la version précédente qui a été fixé par Google. Donc pas possible de plus.
l'Une d'elle est d'accrochage dansFunction.prototype.call
Chrome évalue l'expression parcall
ing sa fonction eval avecInjectedScriptHost
commethisArg
var result = evalFunction.call(object, expression);
Compte tenu de cela, vous pouvez écouter de la
thisArg
decall
êtreevaluate
et d'obtenir une référence vers le premier argument (InjectedScriptHost
)Vous pourriez par exemple jeter une erreur, que l'évaluation a été rejetée.
Voici un exemple où l'expression est passée à un CoffeeScript compilateur avant de passer à l'
evaluate
de la fonction.Netflix met également en œuvre cette fonctionnalité
Ils ont juste remplacer
console._commandLineAPI
de jeter de l'erreur de sécurité.C'est en fait possible étant donné que Facebook a été en mesure de le faire.
Eh bien, pas le développeur web outils mais l'exécution de Javascript dans la console.
Voir ceci: Comment Facebook désactiver le navigateur intégré d'Outils de développement?
- Ce vraiment l'habitude de faire beaucoup, bien que depuis il y a d'autres façons de contourner ce type de sécurité côté client.
Quand vous dites que c'est côté client, il se passe en dehors du contrôle du serveur, donc il n'y a pas beaucoup que vous pouvez faire à ce sujet. Si vous vous demandez pourquoi Facebook n'est toujours présent, ce n'est pas vraiment pour la sécurité, mais pour protéger les utilisateurs normaux qui ne savent pas javascript d'exécuter du code (qu'ils ne savent pas lire) dans la console. C'est courant pour les sites qui promettent d'auto-liker service, ou autres Facebook fonctionnalité robots après vous faites ce qu'ils vous demandent de faire, où dans la plupart des cas, ils vous donnent une capture de javascript à exécuter dans la console.
Si vous n'avez pas autant d'utilisateurs que Facebook, alors je ne pense pas qu'il soit besoin de faire ce que Facebook est en train de faire.
Même si vous avez désactivé Javascript dans la console, en cours d'exécution javascript via la barre d'adresse est toujours possible.
et si le navigateur désactive javascript dans la barre d'adresse, (Lorsque vous collez le code dans la barre d'adresse de Google Chrome, il supprime le membre de phrase 'javascript:') coller du code javascript dans l'un des liens sur inspecter l'élément est encore possible.
Inspecter le point d'ancrage:
Coller le code dans href:
Ligne de fond est la validation côté serveur et de sécurité devrait être le premier, puis le faire côté client après.
Ma façon simple, mais ça peut aider pour d'autres variations sur ce sujet.
Liste de toutes les méthodes et de les modifier, à l'inutile.
Chrome beaucoup changé depuis le temps de facebook pourrait désactiver la console...
Comme par Mars 2017, cela ne fonctionne pas plus.
Meilleur que vous pouvez faire est de désactiver certaines fonctions de la console, par exemple:
En interne devtools injecte une IIFE nommé
getCompletions
dans la page, appelé lorsqu'une touche est enfoncée à l'intérieur de la Devtools de la console.À la recherche à la source de cette fonction, on utilise quelques fonctions globales qui peuvent être remplacées.
À l'aide de la
Error
constructeur, il est possible d'obtenir la pile d'appel, qui comprendragetCompletions
lorsqu'il est appelé par les Devtools.Exemple:
JS:
une solution simple!
console.log()
?console.log()
n'a plus d'importance lorsque la console est constamment nettoyé 🙂Je voudrais aller sur le chemin de l':
Ce n'est pas une mesure de sécurité pour les faibles code pour être laissé sans surveillance. Toujours obtenir une solution permanente à la faiblesse de code et la sécurisation de vos sites web correctement avant la mise en œuvre de cette stratégie
Le meilleur outil de loin à ma connaissance serait pour ajouter plusieurs fichiers javascript qui change simplement de l'intégrité de la page retour à la normale par rafraîchissante ou remplacer le contenu. La désactivation de ce développeur de l'outil ne serait pas la meilleure idée, depuis le contournement est toujours en question étant donné que le code est la partie du navigateur et non sur un serveur de rendu, donc il pourrait être fissuré.
Si vous avez
js file one
la vérification de<element>
des modifications sur les éléments importants etjs file two
etjs file three
vérifier que ce fichier existe, par période, vous aurez le plein de l'intégrité de restauration sur la page de la période.Permet de prendre un exemple de l'4 fichiers et de vous montrer ce que je veux dire.
index.html
mainfile.js
ps.js
ks.js
style.css
Maintenant, c'est juste pour montrer qu'il fonctionne sur tous les fichiers et les tags aswell
Si vous mettez tous ces fichiers ensemble et construire l'exemple, vous verrez que la fonction de cette mesure. Cela permettra d'éviter certains imprévus injections doivent la mettre en œuvre correctement sur tous les éléments importants dans votre fichier d'index en particulier lorsque l'on travaille avec PHP.
Pourquoi j'ai choisi de le recharger au lieu de revenir à la normale de la valeur de l'attribut est le fait que certains attaquants pourraient avoir une autre partie du site est déjà configuré et prêt, et il diminue code montant. Le rechargement de retirer toutes les attaquant est un travail difficile, et il va probablement aller jouer quelque part plus facile.
Une autre remarque: Cela pourrait devenir beaucoup de code afin de le garder propre et assurez-vous d'ajouter des définitions où ils appartiennent à faire des modifications facile à l'avenir. Également définir le nombre de secondes de votre choix quantité 1 seconde d'intervalle sur les pages de grande taille pourraient avoir des effets dévastateurs sur les anciens ordinateurs de vos visiteurs pourraient être à l'aide de