Sicurezza di cross-origine XMLHttpRequest Javascript

1

Sto costruendo un'estensione di Chrome che creerà richieste "ricevute" e "inviate" di origine incrociata a pochi siti Web di terze parti. Ho ricercato questo processo per ore e mi sto interessando sempre più alla sicurezza.

Ho bisogno di ottenere le informazioni sull'URL "aggiungi al carrello" e di pubblicare le informazioni dell'utente su quella pagina per compilare i campi richiesti. La mia estensione di Chrome ha una pagina JavaScript di sfondo, una pagina JavaScript popup, una pagina HTML con informazioni utente e una pagina HTML popup. La richiesta HTTP si verificherà sulla pagina JavaScript di sfondo e invierà una richiesta di origine incrociata al sito web che l'utente sta visitando.

Sono preoccupato per la sicurezza durante la pubblicazione di dati utente e la possibilità di recuperare informazioni dannose quando utilizzo la richiesta get, per ottenere dati dalla pagina, possibilmente un'immagine e l'URL add to bag. Ho letto di fuggire; ma non sono sicuro di come funzioni questo processo. Semplicemente 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);
};

Ho trovato questo sito Web che spiega come prevenire gli attacchi XSS: XS (Cross Site Scripting) Cheat Sheet

Devo usare JsonP accoppiato con una funzione di escape come, questa funzione è annidata sotto l'istruzione if?

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

Il sito web degli sviluppatori di Chrome afferma che:

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

sono pratiche sicure e per evitare semplicemente di usare .innerhtml .

Qualunque consiglio o materiale di lettura suggerito per ulteriori ricerche mi aiuterà immensamente.

    
posta john dith 18.10.2015 - 20:14
fonte

1 risposta

1

Non utilizzare encodeuricomponent - questo è per i valori di codifica percentuale per l'inserimento negli URI (come suggerito dal suo nome).

I dati non possono essere dannosi. Può essere solo "dannoso" nel contesto in cui viene utilizzato. Se tutto ciò che stai facendo è visualizzarlo sulla pagina, segui la raccomandazione di impostare il testo anziché l'HTML, poiché qualsiasi carattere con un significato speciale verrà codificato correttamente utilizzando questa proprietà.

Utilizza textContent anziché innerText poiché quest'ultimo è specifico per Internet Explorer, con pochi altri browser che eseguono il tagging anziché uno standard web.

JSONP è meno sicuro di CORS, poiché devi credere che il dominio esterno non stia iniettando script dannosi nel tuo sito (se il dominio esterno è dannoso o è stato esso stesso compromesso).

    
risposta data 20.10.2015 - 13:58
fonte

Leggi altre domande sui tag