¿Es seguro este filtro XSS o no?

-1

Tengo un sitio clasificado, me preguntaba si esto es lo suficientemente seguro o no, entre que obtuve este filtro de un amigo mío.

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);
}

Parece que la primera línea filtra todos los caracteres excepto los caracteres de las palabras (\ w), y # reemplazándolos con un guión bajo, antes de pasarlos a la función jQuery. Un atacante puede omitir ese filtro y obtener algunos javascript para ejecutar (por ejemplo, una alerta), necesito saber si es así debido al contenido confidencial de mi sitio.

    
pregunta Test 08.04.2016 - 23:09
fuente

1 respuesta

1

No pase la entrada del usuario a la función jQuery o $ si no desea que se interprete como HTML. Use $.find(a) en su lugar, y entonces no tiene que preocuparse por filtrarlo. Aunque debes hacer esto en un bloque try-catch porque el usuario podría dar un selector no válido.

Además, es una buena práctica evitar la reutilización de variables como a para diferentes propósitos.

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);
}
    
respondido por el Macil 09.04.2016 - 00:00
fuente

Lea otras preguntas en las etiquetas