practices practice nodejs node good best xss node.js serverside-javascript

xss - good - nodejs best practice github



Prevenir XSS en Node.js/server side javascript (7)

Creé un módulo que agrupa el desinfectante HTML de Caja

npm install sanitizer

http://github.com/theSmaw/Caja-HTML-Sanitizer

https://www.npmjs.com/package/sanitizer

Cualquier comentario apreciado.

¿Alguna idea de cómo se podría evitar los ataques XSS en una aplicación node.js? Todas las librerías que manejan la eliminación de javascript en hrefs, atributos onclick, etc. de datos POST?

No quiero tener que escribir una expresión regular para todo eso :)

¿Alguna sugerencia?


En las versiones más nuevas del módulo de validator , puede usar la siguiente secuencia de comandos para evitar el ataque XSS:

var validator = require(''validator''); var escaped_string = validator.escape(someString);


Pruebe el módulo npm strip-js . Realiza las siguientes acciones:

  • Desinfecta HTML
  • Elimina las etiquetas de script
  • Elimina atributos como "onclick", "onerror", etc. que contienen código JavaScript
  • Elimina los atributos "href" que contienen código JavaScript

https://www.npmjs.com/package/strip-js




Todas las técnicas habituales se aplican también a la salida node.js, lo que significa:

  • Las listas negras no funcionarán.
  • Se supone que no debes filtrar la entrada para proteger la salida HTML. No funcionará o funcionará deformando innecesariamente los datos.
  • Se supone que debes escanear HTML en texto en salida HTML.

No estoy seguro si node.js viene con algo incorporado para esto, pero algo así debería hacer el trabajo:

function htmlEscape(text) { return text.replace(/&/g, ''&amp;''). replace(/</g, ''&lt;''). // it''s not neccessary to escape > replace(/"/g, ''&quot;''). replace(/''/g, ''&#039;''); }


Una de las respuestas a Sanitize / Rewrite HTML en el lado del cliente sugiere tomar prestado el desinfectante HTML basado en whitelist en JS de Google Caja que, por lo que puedo decir de un scroll-through rápido, implementa un analizador HTML SAX sin depender del DOM del navegador

Actualización: Además, tenga en cuenta que al desinfectante de Caja aparentemente se le ha dado una revisión de seguridad completa y profesional, mientras que las expresiones regulares son conocidas por ser muy fáciles de detectar de forma segura.

Actualización 2017-09-24: ahora también está DOMPurify . No lo he usado todavía, pero parece que cumple o excede cada punto que busco:

  • Se basa en la funcionalidad proporcionada por el entorno de tiempo de ejecución siempre que sea posible. (Es importante tanto para el rendimiento como para maximizar la seguridad al basarse en implementaciones bien probadas y maduras tanto como sea posible).

    • Se basa en DOM o jsdom un navegador para Node.JS.
  • Configuración predeterminada diseñada para pelar lo menos posible al tiempo que se garantiza la eliminación de javascript.

    • Admite HTML, MathML y ​​SVG
    • Vuelve a la propiedad de Microsoft, no configurable toStaticHTML bajo IE8 e IE9.
  • Altamente configurable, lo que lo hace adecuado para imponer limitaciones en una entrada que puede contener HTML arbitrario, como un campo de comentario WYSIWYG o Markdown. (De hecho, es la parte superior de la pila aquí)

    • Admite la lista blanca / lista blanca de atributos / lista negra habitual y la lista blanca de direcciones URL regex.
    • Tiene opciones especiales para desinfectar aún más para ciertos tipos comunes de metacaracteres de plantilla HTML.
  • Se toman en serio la compatibilidad y la fiabilidad

    • Pruebas automatizadas que se ejecutan en 16 navegadores diferentes, así como tres versiones principales diferentes de Node.JS.
    • Para garantizar que los desarrolladores y los hosts de CI estén todos en la misma página, se publican los archivos de bloqueo.