¿Es un riesgo de seguridad si el usuario ingresa caracteres html en un cuadro de texto y se reflejan en la página siguiente de un sitio web? (no etiquetas de script)

3

En mi sitio web tengo un cuadro de texto donde el usuario puede ingresar lo que quiera y el texto se imprime en la página siguiente. Para ciertos casos, pueden escribir etiquetas HTML para dar formato a su mensaje, de modo que en la próxima página del sitio web, las cosas se puedan poner en negrita, en una lista, en cursiva, etc., pero no se permiten las etiquetas de script debido a las vulnerabilidades de XSS.

Ahora mismo permito que se refleje la etiqueta <a> , por lo que puedo escribir en el cuadro de texto <a href=https://google.ca>sample_link</a> y en la página siguiente si el usuario hace clic en el texto sample_link , se redirigirá a google.ca .

He estado leyendo para saber si puede contraer un virus simplemente visitando un sitio web, y basado en esta respuesta aquí: ¿Puedes contraer virus simplemente visitando un sitio web en Chrome? y muchos otros, parece que puedes. Entonces, diga que el usuario no colocó google.ca y, en cambio, alguna URL malintencionada, si hace clic en ese enlace, su computadora puede infectarse o puede ocurrir algún otro ataque.

Lo que quiero saber es si esto es realmente un problema, ya que en este momento parece que la única manera de que esto sea un problema es si los mismos usuarios ingresan a este enlace malicioso y hacen clic en él. Entonces, ¿hay una manera para que un atacante capitalice el hecho de que esta etiqueta <a> se está reflejando? Creo que una forma es que si lo que alguien ingresa en un cuadro de texto se refleja en una página que todos pueden ver, entonces otros usuarios pueden hacer clic en este enlace, pero eso significaría que los sitios como stackoverflow y otros foros serían "inseguros".

Sería genial si alguien pudiera arrojar algo de luz sobre esta situación. Gracias de antemano!

Editar:

Tengo un conjunto de etiquetas en lista blanca que pueden reflejarse. Aquí están:

"a", "b", "blockquote", "br", "cite", "code", "dd", "dl", "dt", "em", "i", "li", "ol", "p", "pre", "q", "small", "span", "strike", "strong", "sub", "sup", "u", "ul"
    
pregunta Michael 15.08.2017 - 18:52
fuente

1 respuesta

8
  

las cosas pueden aparecer en negrita, en una lista, en cursiva, etc., pero las etiquetas de script no están permitidas debido a las vulnerabilidades de XSS.

Eso no es suficiente, su sitio todavía es vulnerable a XSS .

Aquí hay algunos ejemplos de XSS que no requieren etiquetas <script> :

  • <svg onload="alert(document.domain)">
  • <img src="x" onerror="alert(document.domain)">
  • <body onload="alert(document.domain)">
  • <iframe src="javascript:alert(document.domain)">
  • ...

Línea inferior: no puede prevenir XSS de manera confiable al incluir en la lista negra ciertas etiquetas. En su lugar, debe implementar una lista blanca estricta de etiquetas y atributos permitidos.

Incluso si solo permites etiquetas <a> , aún te quedan XSS a través de pseudo protocolos. Por ejemplo:

<a href="javascript:alert(document.domain)">Click me</a>

Sin embargo, si solo permite enlaces con http[s]:// URL, no está creando un riesgo inmediato para su sitio, además de permitir que las personas especifiquen enlaces a sitios potencialmente maliciosos (o simplemente spam). Como ha indicado correctamente, es un riesgo que muchos sitios web sociales, incluida la SE, están dispuestos a asumir.

    
respondido por el Arminius 15.08.2017 - 19:08
fuente

Lea otras preguntas en las etiquetas