Seguridad de XMLHttpRequest Javascript de origen cruzado

1

Estoy creando una extensión de Chrome que hará solicitudes de "obtención" y "publicación" de origen cruzado a algunos sitios web de terceros. Llevo horas investigando este proceso y cada vez me preocupo más por la seguridad.

Necesito obtener la información de URL "agregar a la bolsa" y publicar la información del usuario en esa página para completar los campos requeridos. La extensión de My Chrome tiene una página JavaScript de fondo, una página emergente de JavaScript, una página HTML con información del usuario y una página emergente HTML. La solicitud HTTP ocurrirá en la página de JavaScript de fondo y enviará una solicitud de origen cruzado al sitio web que el usuario está visitando actualmente.

Me preocupa la seguridad al publicar datos de usuarios y la posibilidad de recuperar información maliciosa cuando uso la solicitud de obtención, para obtener datos de la página, posiblemente una imagen, y la URL de agregar a la bolsa. He leído acerca de escapar; pero no estoy realmente seguro de cómo funciona este proceso. ¿Simplemente uso encodeuricomponent() ?

function httpGetAsync(theUrl, callback){
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            var resp = encodeURIComponent(xmlHttp.responseText)
            callback(resp);         
    }
    xmlHttp.open("GET", theUrl, true);
};

Encontré este sitio web que trata sobre cómo prevenir ataques XSS: XSS (Cross Site Scripting) Prevention Cheat Sheet

¿Debo usar JsonP junto con una función de escape como, por ejemplo, esta función anidada bajo la sentencia if?

function (xmlHttp) {
    // function to escape data? not sure how to do this
    var resp = encodeURIComponent(xmlHttp.responseText)
    callback(resp);
}

El sitio web de Chrome para desarrolladores indica que:

document.getElementById("resp").innerText = xhr.responseText;
or: resp = JSON.parse(xhr.responseText);

son prácticas seguras y simplemente para evitar el uso de .innerhtml .

Cualquier consejo o material de lectura sugerido para futuras investigaciones me ayudará enormemente.

    
pregunta john dith 18.10.2015 - 20:14
fuente

1 respuesta

1

No use encodeuricomponent : esto es para el porcentaje de valores de codificación para la inserción en los URI (como lo sugiere su nombre).

Los datos en sí no pueden ser maliciosos. Solo puede ser "malicioso" en el contexto donde se usa. Si lo único que está haciendo es mostrarlo en la página, siga la recomendación de configurar texto en lugar de HTML, ya que cualquier carácter con un significado especial se codificará correctamente con esta propiedad.

Utilice textContent en lugar de innerText ya que este último es específico para Internet Explorer, con algunos otros navegadores etiquetados en lugar de un estándar web.

JSONP es menos seguro que CORS, ya que debe confiar en que el dominio externo no está inyectando un script malicioso en su sitio (ya sea que el dominio externo sea malicioso o haya sido comprometido).

    
respondido por el SilverlightFox 20.10.2015 - 13:58
fuente

Lea otras preguntas en las etiquetas