¿Cómo desactiva Facebook las herramientas de desarrollo integradas del navegador?
Aparentemente, debido a las estafas recientes, las personas explotan las herramientas de desarrollador para publicar spam e incluso las utilizan para "piratear" cuentas. Facebook ha bloqueado las herramientas de desarrollo y ni siquiera puedo usar la consola.
¿Cómo hicieron eso? Una publicación de Stack Overflow afirmó que no es posible , pero Facebook demostró que estaban equivocados.
Simplemente vaya a Facebook y abra las herramientas de desarrollo, escriba un carácter en la consola y aparecerá esta advertencia. No importa lo que pongas, no se ejecutará.
¿Cómo es esto posible?
Incluso bloquearon la función de autocompletar en la consola:
Soy ingeniero de seguridad en Facebook y esto es culpa mía. Estamos probando esto para algunos usuarios para ver si puede ralentizar algunos ataques en los que se engaña a los usuarios para que peguen código JavaScript (malicioso) en la consola del navegador.
Para que quede claro: intentar bloquear a los piratas informáticos en el lado del cliente es una mala idea en general; esto es para proteger contra un ataque de ingeniería social específico .
Si terminaste en el grupo de prueba y esto te molesta, lo siento. Intenté hacer que la antigua página de exclusión voluntaria (ahora página de ayuda ) sea lo más simple posible y al mismo tiempo lo suficientemente aterradora como para detener al menos a algunas de las víctimas.
El código real es bastante similar al enlace de @joeldixon66 ; el nuestro es un poco más complicado sin una buena razón.
Chrome envuelve todo el código de la consola en
with ((console && console._commandLineAPI) || {}) {
<code goes here>
}
... entonces el sitio se redefine console._commandLineAPI
para lanzar:
Object.defineProperty(console, '_commandLineAPI',
{ get : function() { throw 'Nooo!' } })
Esto no es suficiente (¡pruébalo!) , pero ese es el truco principal.
Epílogo: El equipo de Chrome decidió que derrotar a la consola desde JS del lado del usuario era un error y solucionó el problema , invalidando esta técnica. Posteriormente, se agregó protección adicional para proteger a los usuarios del self-xss .
Localicé el script destructor de la consola de Facebook usando las herramientas de desarrollo de Chrome. Aquí está el guión con cambios menores para facilitar la lectura. He eliminado los bits que no podía entender:
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);
Con esto, el autocompletado de la consola falla silenciosamente mientras que las declaraciones escritas en la consola no se ejecutarán (la excepción se registrará).
Referencias:
- Objeto.defineProperty
- Objeto.getOwnPropertyDescriptor
- Función console.log de Chrome (para obtener consejos sobre cómo formatear la salida)
No pude lograr que activara eso en ninguna página. Una versión más robusta de esto lo haría:
window.console.log = function(){
console.error('The developer console is temp...');
window.console.log = function() {
return false;
}
}
console.log('test');
Para aplicar estilo a la salida: Colores en la consola JavaScript
Editar Pensando que @joeldixon66 tiene la idea correcta: deshabilitar la ejecución de JavaScript desde la consola « ::: KSpace :::