prevención XSS a través de JavaScript

1

Estoy trabajando en una prevención XSS a través de Javascript. Estoy usando el siguiente código JS para eso:

(function () {
/*  
XSS prevention via JavaScript 
*/
var XSSObject = new Object();
XSSObject.lockdown = function (obj, name) {
    if (!String.prototype.startsWith) {
        try { 
            if (Object.defineProperty) {
                Object.defineProperty(obj, name, {
                    configurable: false
                });
            }
        } catch (e) { };
    }
}
XSSObject.proxy = function (obj, name, report_function_name, exec_original) {
    var proxy = obj[name];
    obj[name] = function () {
        if (exec_original) {
            return proxy.apply(this, arguments);
        }
    };
    XSSObject.lockdown(obj, name);
};
XSSObject.proxy(window, 'alert', 'window.alert', false);
XSSObject.proxy(window, 'confirm', 'window.confirm', false);
XSSObject.proxy(window, 'prompt', 'window.prompt', false);
XSSObject.proxy(window, 'unescape', 'unescape', false);
XSSObject.proxy(document, 'write', 'document.write', false);
XSSObject.proxy(String, 'fromCharCode', 'String.fromCharCode', true);
})();

Usando ese script, no es posible ejecutar las funciones alert , confirm , prompt , unescape , write y fromCharCode . ¿Hay alguna manera de evitar esta prevención? Si es así, ¿cómo y por qué?

    
pregunta manuel-hoelzl 24.06.2018 - 22:27
fuente

2 respuestas

1

Sí, hay formas de evitar esta medida de seguridad. Como se señala en un comentario:

var iframe = document.createElement('iframe');
iframe.srcdoc = '';
document.body.appendChild(iframe);
iframe.contentWindow.alert.call(window, 'hello');

El problema es que poner en una lista negra con éxito las funciones individuales en un lenguaje tan complejo es un ejercicio inútil. Tratar de prevenir los ataques del mundo real mediante listas negras es francamente quijotesco.

    
respondido por el forest 25.06.2018 - 05:36
fuente
0

Algunas de las funciones que ha mencionado, alert , confirm , prompt , a menudo solo las utilizan las personas que desean probar que existe un XSS al hacer un PoC.

Hay muchas otras formas de activar XSS según el punto de inyección y el tipo de carga útil, como usar location.href='https://evil.com para cargar un script desde otro sitio, sin alertar a la víctima de cualquier comportamiento sospechoso.

La forma correcta de minimizar XSS tanto como sea posible es desinfectar las opiniones de los usuarios e implementar una política estricta de CSP . Consulte la Hoja de referencia de prevención OWASP XSS para obtener una lista no exhaustiva de medidas que puede tomar.

    
respondido por el Yuu 26.06.2018 - 09:57
fuente

Lea otras preguntas en las etiquetas