1767 votes

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.

Enter image description here

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:

Enter image description here

2519voto

Alf Points 5346

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 une 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 faire la page de désinscription aussi simple que possible, tout en restant assez effrayant pour nous arrêter au moins certains de la les victimes.

Le code est assez similaire à @joeldixon66 du lien; la nôtre est un peu plus compliqué pour aucune bonne raison.

Chrome enveloppe tout le code dans la console

with ((console && console._commandLineAPI) || {}) {
  <code goes here>
}

... de sorte que le site redéfinit console._commandLineAPI pour lancer:

Object.defineProperty(console, '_commandLineAPI',
   { get : function() { throw 'Nooo!' } })

Ce n'est pas tout à fait assez (essayez!), 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 la correction du problème, le rendu de cette technique non valide. Par la suite, une protection supplémentaire a été ajouté pour protéger les utilisateurs de l'auto-xss.

96voto

Salman A Points 60620

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:

Object.defineProperty(window, "console", {
    value: console,
    writable: false,
    configurable: false
});

var i = 0;
function showWarningAndThrow() {
    if (!i) {
        setTimeout(function () {
            console.log("%cWarning message", "font: 2em sans-serif; color: yellow; background-color: red;");
        }, 1);
        i = 1;
    }
    throw "Console is disabled";
}

var l, n = {
        set: function (o) {
            l = o;
        },
        get: function () {
            showWarningAndThrow();
            return l;
        }
    };
Object.defineProperty(console, "_commandLineAPI", n);
Object.defineProperty(console, "__commandLineAPI", n);

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:

76voto

joeldixon66 Points 782

Il fonctionne très bien pour moi en Chrome - mais Facebook ne semblent essayer de désactiver la console JavaScript pour éviter une récente arnaque.

Heureusement, ils offrent une option pour activer cette protection hors https://www.facebook.com/selfxss

Edit: Comme pour mon commentaire - quelque chose comme cela pourrait empêcher l'exécution de JavaScript, à partir de la console.

49voto

Will Points 2156

Je ne pouvais pas le faire déclencher que sur n'importe quelle page. Une version plus robuste de ce serait de faire:

window.console.log = function(){
    console.error('The developer console is temp...');
    window.console.log = function() {
        return false;
    }
}

console.log('test');

Pour le style de la sortie: les Couleurs dans la console JavaScript

Modifier la Pensée @joeldixon66 a la bonne idée: Désactiver le JavaScript de l'exécution de la console « ::: KSpace :::

33voto

C5H8NNaO4 Points 4435

En 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 saisies dans les développeurs de la console.

L'une d'elle est d'accrochage dans Function.prototype.call

Chrome évalue l'expression en calling sa fonction eval avec InjectedScriptHost comme thisArg

var result = evalFunction.call(object, expression);

Compte tenu de cela, vous pouvez écouter l' thisArg de call être evaluate et d'obtenir une référence vers le premier argument (InjectedScriptHost)

if (window.webkitURL) {
    var ish, _call = Function.prototype.call;
    Function.prototype.call = function () { //Could be wrapped in a setter for _commandLineAPI, to redefine only when the user started typing.
        if (arguments.length > 0 && this.name === "evaluate" && arguments [0].constructor.name === "InjectedScriptHost") { //If thisArg is the evaluate function and the arg0 is the ISH
            ish = arguments[0];
            ish.evaluate = function (e) { //Redefine the evaluation behaviour
                throw new Error ('Rejected evaluation of: \n\'' + e.split ('\n').slice(1,-1).join ("\n") + '\'');
            };
            Function.prototype.call = _call; //Reset the Function.prototype.call
            return _call.apply(this, arguments);  
        }
    };
}

Vous pourriez par exemple jeter une erreur, que l'évaluation a été rejetée.

enter image description here

Voici un exemple où l'expression est passée à un CoffeScript compilateur avant de passer à l' evaluate fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X