Questo filtro XSS è sicuro o no?

-1

Ho un sito classificato, mi chiedevo se questo è abbastanza sicuro o meno, tra ho ottenuto questo filtro da un mio amico.

var a = window.location.hash.replace(/[^\w\-#]/g, "_");
a = a + ".expandable";
if (0 < jQuery(a).length) {
  a = jQuery(a).find(".exw-control");
  if (0 < a.length) a.trigger("expand",null);
}

Sembra che la prima riga filtra tutti i caratteri tranne i caratteri word (\ w), - e # sostituendoli con un carattere di sottolineatura, prima di passarli alla funzione jQuery. È un utente malintenzionato in grado di ignorare quel filtro e ottenere un javascript da eseguire (ad esempio un avviso), ho bisogno di sapere se sì a causa del contenuto sensibile del mio sito.

    
posta Test 08.04.2016 - 23:09
fonte

1 risposta

1

Non passare l'input dell'utente alla funzione jQuery o $ se non vuoi che venga interpretato come HTML. Usa $.find(a) invece, e quindi non devi preoccuparti di filtrarlo. Anche se dovresti farlo in un blocco try-catch perché l'utente potrebbe dare un selettore non valido.

Inoltre, è buona norma evitare di riutilizzare variabili come a per scopi diversi.

try {
  var a = window.location.hash + ".expandable";
  if (0 < jQuery.find(a).length) {
    var control = jQuery.find(a).find(".exw-control");
    control.trigger("expand",null);
  }
} catch(e) {
  console.error("Error processing hash", e);
}
    
risposta data 09.04.2016 - 00:00
fonte

Leggi altre domande sui tag