¿Existe la posibilidad de inyectar XSS en la función jQuery attr?

0

Me preguntaba si esta función sería vulnerable a XSS.

var url = "google.com";

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

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

La 'url' es la entrada del usuario, y el <a/> se colocaría en alguna página web.

No pude encontrar una manera de ejecutar código javascript en esta función. Pero antes de implementar esto, sería bueno que alguien pueda echar un vistazo.

    
pregunta Rob 23.05.2017 - 10:04
fuente

2 respuestas

2

Lo que realmente hace jQuery cuando usas attr(name, value) es llamar a setAttribute(name, value) en los elementos DOM relevantes. No estoy en casa en la fuente jQuery, pero creo que esta es la parte relevante . Esto significa que no puedes escapar del contexto de atributo. Así que es tan seguro como lo es la vainilla JS.

Lo que debes tener en cuenta es lo siguiente:

  • No permita que los usuarios controlen el nombre del atributo, que abre la puerta para cambiarlo a algo malicioso, como onclick . A menos que haga una lista blanca, solo permita que el usuario controle el valor.
  • Algunos atributos HTML son inherentemente peligrosos. Esto incluye href , ya que puedes hacer algo como javascript:alert("XSS"); . Otros ejemplos son style y controladores de eventos JS. Sin embargo, como te aseguras de que el valor siempre comience con http , estarás bien.
respondido por el Anders 23.05.2017 - 13:36
fuente
-1

Como se muestra en su código de ejemplo, no hay desinfección del usuario antes de colocarlo en el código HTML. Con el uso de una carga útil, como: domain.com" onmouseenter="alert(1)
Esto irá directamente a la etiqueta y se ejecutará del lado del cliente.

Cualquier atributo de script que sea válido para esa etiqueta se ejecutará del lado del cliente. Este stackoverflow tiene una función para sanear la entrada en jQuery.

    
respondido por el Eelke 23.05.2017 - 10:40
fuente

Lea otras preguntas en las etiquetas