¿Cómo prevenir el auto-XSS?

1

Estoy creando un sitio web que solo utiliza la API REST para todas las funciones y funcionalidades, desde el registro y el inicio de sesión hasta la obtención de datos y el llenado de la página web con Moustache como motor de plantilla para los objetos.

La autenticación se basa en el token, en el que el token se agrega dinámicamente al encabezado utilizando las funciones de JS para evitar el ataque CSRF. Todas las funciones al interactuar con los datos de entrada del usuario tienen desinfectantes para evitar el ataque XSS. Básicamente, cada acción válida tiene una función JS asociada asociada con la protección XSS y CSRF habilitada.

¿Qué sucede si un usuario desea omitir estas funciones y ejecutar sus propias funciones desde la consola realizando las mismas acciones sin las protecciones XSS? Una opción es implementar la protección XSS del lado del servidor.

Y ahora, si alguien trata de engañar a los usuarios para que peguen un código JS en la consola, que esencialmente tiene acceso a tokens de autenticación y puede realizar solicitudes no deseadas que pueden dañar al usuario. ¿Cómo mitigar este ataque o hay una manera de prevenir o identificar tales acciones?

    
pregunta Harwee 13.03.2018 - 09:43
fuente

4 respuestas

5
  

¿Qué pasa si alguien intenta engañar a los usuarios para que peguen un código JS en la consola?

¿Qué sucede si alguien engaña a los usuarios para que instalen malware en su computadora?
¿Qué sucede si alguien marca un número falso de soporte técnico después de encontrar un problema con su sitio web y los estafadores hacen algo malo con la cuenta del usuario en su sitio web? ¿Qué pasa si las personas en 4chan publican información acerca de los teléfonos inteligentes que se cargan de manera rápida e inalámbrica en un microondas, y la gente realmente lo intenta y destruye su teléfono?

Creo que esto se encuentra en la categoría "fuera de su control", al menos en lo que respecta a las medidas técnicas.

Inyectar un código personalizado en la consola de un desarrollador no es algo contra lo que pueda protegerse de manera efectiva, a menos que esté dentro de su propia compañía (o la de un cliente) y puede imponer / recomendar una política de la compañía para deshabilitar la consola en navegadores para no desarrolladores o alguna cosa. E incluso entonces, probablemente sea más molesto para los usuarios legítimos que realmente útil.

Lo que puedes hacer es educar e informar a las personas. No se limita a self-XSS: si le pido que pegue algo de código en un archivo de texto y le cambie el nombre a vbs, entonces tiene exactamente el mismo problema. El problema aquí es la ejecución de código que no es de confianza, no solo el auto-XSS denominado a la moda.

    
respondido por el Luc 18.03.2018 - 22:01
fuente
2

No hay manera de distinguir una llamada a API hecha desde la aplicación "real" de una hecha desde la consola. El servidor solo ve la solicitud HTTP y se ve exactamente igual. Realmente no hay nada que puedas hacer aquí.

Self XSS no es una vulnerabilidad en su sitio y, por lo tanto, no puede solucionarlo. Es una vulnerabilidad en el navegador, o quizás más bien en las personas. Los que pueden hacer una diferencia aquí son los proveedores de navegadores, y de hecho, lo han hecho. La primera vez que enciendes la consola (al menos en Firefox), te da una advertencia que explica que este es un lugar peligroso y que no deberías simplemente copiar y pegar cosas aquí.

    
respondido por el Anders 18.03.2018 - 23:53
fuente
1

Algunos sitios como Facebook imprimen una gran advertencia en la consola del desarrollador (creo que solo estoy usando console.log ) explicando a los usuarios que nunca deben pegar código allí.

    
respondido por el allo 19.03.2018 - 11:17
fuente
0

Al igual que lo que Luc ha dicho, es imposible prevenir completamente el XSS, o cualquier cosa relacionada con la seguridad en realidad.

Sin embargo, a diferencia de las otras respuestas que indican que solo puede mostrar una advertencia visual utilizando console.log (), en realidad es posible deshabilitar la consola por completo. Consulte este post para los detalles completos. Sin embargo, es una mala idea confiar en la protección del lado del cliente contra XSS.

Al usar este código de la publicación vinculada, podrá desactivar la consola de desarrollador en el lado del cliente:

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);
    
respondido por el Yuu 26.06.2018 - 11:23
fuente

Lea otras preguntas en las etiquetas