¿Es este filtro XSS lo suficientemente seguro? Y si no, ¿podrías demostrar cómo podría romperse?

-5
function htmlEntities(n) {
            return String(n).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;")
}
  • Reemplaza & con &amp; ;
  • Reemplaza < con &lt;
  • Reemplaza > con &gt;
  • Reemplaza " con &quot;

Si esto necesita ser más seguro, explique cómo romperlo para que pueda aprender cómo se puede romper y cómo evitarlo.

    
pregunta Storm 03.09.2016 - 23:36
fuente

1 respuesta

4

La prevención XSS tiene que ver con el contexto. Necesita diferentes estrategias dependiendo del contexto en el que se insertarán los datos no confiables de los que se está escapando.

Aunque creo que su método estaría bien dentro de los elementos HTML y en los atributos HTML entre comillas dobles, tendría problemas en los siguientes contextos:

  • En los atributos HTML con comillas simples o sin comillas, serás pwned.
  • en, por ejemplo, un atributo href , usted sería pwned con p. ej. una URL javascript: o vbscript: .
  • En los literales de cadena de JavaScript que utilizan comillas simples, se le prometerá.
  • En los literales de cadena de JavaScript que utilizan comillas dobles, un atacante podría detener la ejecución del script insertando una nueva línea y, por lo tanto, provocar un error de sintaxis. Esto podría tener consecuencias inesperadas y adversas en algunas circunstancias.
  • Y luego está el CSS, que tiene su propio conjunto de reglas diferentes ...

Para obtener una guía detallada sobre cómo hacer esto correctamente, recomiendo encarecidamente la hoja de trucos de prevención OWASP XSS . Creo que las principales lecciones para llevar a casa de todo esto es: XSS es complicado. No confíe en su propia solución elaborada en casa para detenerla. Use una biblioteca bien probada en su lugar.

(Y Alexander O'Mara tiene toda la razón en su comentario. Si está en el navegador , solo ve con textContent .)

    
respondido por el Anders 04.09.2016 - 17:25
fuente

Lea otras preguntas en las etiquetas