Donc apparemment à cause des récentes escroqueries, les outils de développement sont exploités par les gens pour poster du spam et même utilisés 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 article de Stack Overflow a affirmé que ce n'était pas possible , mais Facebook leur a prouvé le contraire.
Accédez simplement à Facebook et ouvrez les outils de développement, saisissez un caractère dans la console et cet avertissement apparaît. Peu importe ce que vous y mettez, il ne sera pas exécuté.
Comment est-ce possible?
Ils ont même bloqué la saisie semi-automatique dans la console:
javascript
facebook
google-chrome-devtools
Derek 朕 會 功夫
la source
la source
Réponses:
Je suis ingénieur en sécurité chez Facebook et c'est ma faute. Nous testons cela pour certains utilisateurs pour voir si cela peut ralentir certaines attaques où les utilisateurs sont amenés à coller du code JavaScript (malveillant) dans la console du navigateur.
Juste pour être clair: essayer de bloquer les pirates côté client est une mauvaise idée en général; il s'agit de se protéger contre une attaque d'ingénierie sociale spécifique .
Si vous vous êtes retrouvé dans le groupe de test et que cela vous ennuie, désolé. J'ai essayé de rendre l'ancienne page de désinscription (maintenant la page d'aide ) aussi simple que possible tout en étant suffisamment effrayante pour arrêter au moins certaines des victimes.
Le code réel est assez similaire au lien de @ joeldixon66 ; la nôtre est un peu plus compliquée sans raison valable.
Chrome encapsule tout le code de la console dans
... donc le site redéfinit
console._commandLineAPI
pour lancer:Ce n'est pas tout à fait suffisant (essayez-le!) , Mais c'est l'astuce principale.
Épilogue: L'équipe Chrome a décidé que la défaite de la console du côté utilisateur JS était un bug et a résolu le problème , rendant cette technique invalide. Par la suite, une protection supplémentaire a été ajoutée pour protéger les utilisateurs contre l'auto-xss .
la source
console.log
.J'ai localisé le script de désactivation de la console de Facebook à l'aide des outils de développement Chrome. Voici le script avec des changements mineurs pour la lisibilité. J'ai supprimé les bits que je ne pouvais pas comprendre:
Avec cela, l'auto-complétion de la console échoue silencieusement tandis que les instructions saisies dans la console ne s'exécuteront pas (l'exception sera consignée).
Références:
la source
Je n'ai pas pu le déclencher sur n'importe quelle page. Une version plus robuste de cela le ferait:
Pour styliser la sortie: Couleurs dans la console JavaScript
Edit Thinking @ joeldixon66 a la bonne idée: désactiver l'exécution JavaScript depuis la console «::: KSpace :::
la source
window.console.log = function(){//empty}
et utiliser console.logOutre la redéfinition
console._commandLineAPI
, il existe d'autres façons de pénétrer dans InjectedScriptHost sur les navigateurs WebKit, pour empêcher ou modifier l'évaluation des expressions entrées dans la console du développeur.Éditer:
Chrome a corrigé cela dans une version antérieure. - qui devait être avant février 2015, car j'ai créé l'essentiel à cette époque
Voici donc une autre possibilité. Cette fois, nous nous connectons, un niveau au-dessus, directement
InjectedScript
plutôt queInjectedScriptHost
par opposition à la version précédente.Ce qui est plutôt sympa, car vous pouvez directement corriger le singe
InjectedScript._evaluateAndWrap
au lieu de devoir vous y fierInjectedScriptHost.evaluate
car cela vous donne un contrôle plus précis sur ce qui devrait arriver.Une autre chose assez intéressante est que nous pouvons intercepter le résultat interne lorsqu'une expression est évaluée et renvoyer cela à l'utilisateur au lieu du comportement normal.
Voici le code, qui fait exactement cela, retourne le résultat interne lorsqu'un utilisateur évalue quelque chose dans la console.
C'est un peu bavard, mais je pensais y mettre quelques commentaires
Donc normalement, si un utilisateur, par exemple, évalue,
[1,2,3,4]
vous vous attendez à la sortie suivante:Après
InjectedScript._evaluateAndWrap
évaluation monkeypatch de la même expression, donne la sortie suivante:Comme vous le voyez, la petite flèche à gauche, indiquant la sortie, 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é comme un objet avec toutes ses propriétés décrites.Je recommande d'essayer d'évaluer telle ou telle expression, y compris celles qui génèrent des erreurs. C'est assez intéressant.
De plus, jetez un œil à l' objet
is
-InjectedScriptHost
- . Il fournit quelques méthodes pour jouer et obtenir un aperçu des éléments internes de l'inspecteur.Bien sûr, vous pouvez intercepter toutes ces informations et renvoyer le résultat d'origine à l'utilisateur.
Remplacez simplement l'instruction return dans le chemin else par un
console.log (res)
areturn res
. Ensuite, vous vous retrouvez avec ce qui suit.Fin du montage
Il s'agit de la version antérieure qui a été corrigée par Google. Ce n'est donc plus une voie possible.
L'un d'eux est accroché àFunction.prototype.call
Chrome évalue l'expression entrée encall
ing sa fonction eval avecInjectedScriptHost
asthisArg
var result = evalFunction.call(object, expression);
Compte tenu de cela, vous pouvez écouter le
thisArg
d'call
êtreevaluate
et d' obtenir une référence au premier argument (InjectedScriptHost
)Vous pouvez par exemple envoyer une erreur, que l'évaluation a été rejetée.
Voici un exemple où l'expression entrée est passée à un compilateur CoffeeScript avant de la passer à la
evaluate
fonction.la source
Netflix implémente également cette fonctionnalité
Ils remplacent simplement
console._commandLineAPI
pour lancer une erreur de sécurité.la source
C'est en fait possible puisque Facebook a pu le faire. Eh bien, pas les véritables outils de développement Web, mais l'exécution de Javascript dans la console.
Voir ceci: Comment Facebook désactive-t-il les outils de développement intégrés du navigateur?
Cela ne fera vraiment pas grand-chose, car il existe d'autres moyens de contourner ce type de sécurité côté client.
Lorsque vous dites que c'est côté client, cela se produit en dehors du contrôle du serveur, donc vous ne pouvez pas faire grand-chose. Si vous demandez pourquoi Facebook continue de le faire, ce n'est pas vraiment pour la sécurité mais pour protéger les utilisateurs normaux qui ne connaissent pas javascript de l'exécution de code (qu'ils ne savent pas lire) dans la console. Cela est courant pour les sites qui promettent un service de recherche automatique ou d'autres robots de fonctionnalité Facebook après avoir fait ce qu'ils vous demandent de faire, où dans la plupart des cas, ils vous donnent un aperçu de javascript à exécuter dans la console.
Si vous n'avez pas autant d'utilisateurs que Facebook, je ne pense pas qu'il soit nécessaire de faire ce que Facebook fait.
Même si vous désactivez Javascript dans la console, l'exécution de javascript via la barre d'adresse est toujours possible.
et si le navigateur désactive le javascript dans la barre d'adresse, (lorsque vous collez du code dans la barre d'adresse dans Google Chrome, il supprime l'expression "javascript:"), coller du javascript dans l'un des liens via l'élément inspect est toujours possible.
Inspectez l'ancre:
Collez le code dans href:
L'essentiel est la validation côté serveur et la sécurité doit être la première, puis la côté client après.
la source
Chrome a beaucoup changé depuis que Facebook a pu désactiver la console ...
En mars 2017, cela ne fonctionne plus.
Le mieux que vous puissiez faire est de désactiver certaines fonctions de la console, par exemple:
la source
Ma façon simple, mais cela peut aider à d'autres variations sur ce sujet. Dressez la liste de toutes les méthodes et modifiez-les comme inutiles.
la source
En interne, devtools injecte un IIFE nommé
getCompletions
dans la page, appelé lorsqu'une touche est enfoncée dans la console Devtools.En regardant la source de cette fonction , il utilise quelques fonctions globales qui peuvent être écrasées.
En utilisant le
Error
constructeur, il est possible d'obtenir la pile d'appels, qui comprendragetCompletions
lorsqu'elle est appelée par Devtools.Exemple:
la source
une solution simple!
la source
console.log()
t-il le ?console.log()
n'a plus d'importance lorsque la console est constamment nettoyée :)J'irais dans le sens de:
la source
Ce n'est pas une mesure de sécurité pour laisser du code faible sans surveillance. Obtenez toujours une solution permanente au code faible et sécurisez correctement vos sites Web avant de mettre en œuvre cette stratégie
D'après mes connaissances, le meilleur outil serait de loin d'ajouter plusieurs fichiers javascript qui rétablissent simplement l'intégrité de la page à la normale en actualisant ou en remplaçant le contenu. La désactivation de cet outil de développement ne serait pas la meilleure idée car le contournement est toujours en question car le code fait partie du navigateur et non d'un rendu de serveur, il pourrait donc être craqué.
Si vous devez
js file one
vérifier les<element>
changements sur les éléments importants etjs file two
etjs file three
vérifier que ce fichier existe par période, vous aurez une restauration complète de l'intégrité sur la page pendant la période.Prenons un exemple des 4 fichiers et montrons ce que je veux dire.
index.html
mainfile.js
ps.js
ks.js
style.css
Maintenant, c'est juste pour montrer que cela fonctionne sur tous les fichiers et balises
Si vous assemblez tous ces fichiers et construisez l'exemple, vous verrez la fonction de cette mesure. Cela empêchera certaines injections imprévues si vous l'implémentez correctement sur tous les éléments importants de votre fichier d'index, en particulier lorsque vous travaillez avec PHP.
La raison pour laquelle j'ai choisi de recharger au lieu de revenir à la valeur normale par attribut est le fait que certains attaquants pourraient avoir une autre partie du site Web déjà configurée et prête et cela réduit la quantité de code. Le rechargement supprimera tout le travail acharné de l'attaquant et il ira probablement jouer quelque part plus facilement.
Une autre remarque: cela pourrait devenir beaucoup de code, alors gardez-le propre et assurez-vous d'ajouter des définitions à l'endroit où elles appartiennent pour faciliter les modifications à l'avenir. Réglez également les secondes sur votre quantité préférée, car des intervalles de 1 seconde sur de grandes pages peuvent avoir des effets drastiques sur les anciens ordinateurs que vos visiteurs peuvent utiliser.
la source