Esiste la possibilità di iniettare XSS nella funzione jQuery attr?

0

Mi chiedevo se questa funzione fosse vulnerabile a XSS.

var url = "google.com";

if (url.indexOf("http") != 0) { 
    url = "http://" + url;
}

$("<a/>").attr("href", url);

L''url' è l'input dell'utente, e <a/> verrebbe inserito in qualche pagina web.

Non sono riuscito a trovare un modo per eseguire il codice javascript su questa funzione. Ma prima di implementarlo, sarebbe bello che qualcuno possa dare un'occhiata.

    
posta Rob 23.05.2017 - 10:04
fonte

2 risposte

2

Cosa fa effettivamente jQuery quando usi attr(name, value) per chiamare setAttribute(name, value) sugli elementi DOM pertinenti. Non a casa nella sorgente jQuery, ma penso che questo sia la parte pertinente . Ciò significa che non puoi sfuggire al contesto dell'attributo. Quindi è sicuro come vaniglia JS è.

Quello di cui hai bisogno è il seguente:

  • Non lasciare che gli utenti controllino il nome dell'attributo - che apre la porta per cambiarlo in qualcosa di malevolo come onclick . A meno che tu non faccia il whitelist, lascia che sia l'utente a controllare il valore.
  • Alcuni attributi HTML sono intrinsecamente pericolosi. Questo include href , dato che puoi fare qualcosa come javascript:alert("XSS"); . Altri esempi sono style e gestori di eventi JS. Dato che ti assicuri che il valore inizierà sempre con http , dovresti stare bene, però.
risposta data 23.05.2017 - 13:36
fonte
-1

Come mostrato nel codice di esempio, non vi è alcuna sanitizzazione dell'utente prima di essere inserita nel codice HTML. Con l'utilizzo di un payload, ad esempio: domain.com" onmouseenter="alert(1)
Questo andrà dritto al tag e verrà eseguito sul lato client.

Qualsiasi attributo di script valido per quel tag verrà eseguito lato client. Questo stackoverflow ha una funzione per disinfettare l'input in jQuery.

    
risposta data 23.05.2017 - 10:40
fonte

Leggi altre domande sui tag