Prevención de XSS en el nodo.js / javascript del lado del servidor


Cualquier idea de cómo se evitaría un ataque XSS en un nodo.js app? Cualquier libs que maneje la eliminación de javascript en hrefs, atributos onclick, etc. ¿de los datos publicados?

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

Alguna sugerencia?

Author: Techwraith, 2010-09-14

7 answers

Una de las respuestas a Sanitize/Rewrite HTML en el Lado del Cliente sugiere tomar prestado el desinfectante HTML basado en listas blancas en JS de Google Caja que, por lo que puedo decir de un rápido desplazamiento, implementa un analizador de SAX HTML sin depender del DOM del navegador.

Actualización: Además, tenga en cuenta que el desinfectante Caja aparentemente ha recibido una revisión de seguridad completa y profesional, mientras que las expresiones regulares son conocidas por ser muy fáciles de errar en el compromiso de seguridad formas.

Actualización 2017-09-24: también Hay ahora DOMPurify. Todavía no lo he usado, 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. (Importante tanto para el rendimiento como para maximizar la seguridad confiando en implementaciones bien probadas y maduras tanto como sea posible.)

    • Se basa en el DOM de un navegador o jsdom para Nodo.JS.
  • Configuración por defecto diseñada para eliminar lo menos posible sin dejar de garantizar la eliminación de javascript.

    • Soporta 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í)

    • Soporta la etiqueta / atributo habitual lista blanca / lista negra y URL regex lista blanca
    • Tiene opciones especiales para desinfectar aún más 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 CI sean todos en la misma página, los archivos de bloqueo se publican.
 21
Author: ssokolow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-24 11:48:57

He creado un módulo que agrupa el desinfectante de Caja HTML

npm install sanitizer

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

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

Cualquier comentario apreciado.

 53
Author: theSmaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-22 16:21:58

Todas las técnicas habituales se aplican al nodo.salida js también, lo que significa:

  • Las listas negras no funcionarán.
  • Se supone que no debe filtrar la entrada para proteger la salida HTML. No funcionará o funcionará al malformar innecesariamente los datos.
  • Se supone que debe HTML-escape de texto en la salida HTML.

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

function htmlEscape(text) {
   return text.replace(/&/g, '&').
     replace(/</g, '&lt;').  // it's not neccessary to escape >
     replace(/"/g, '&quot;').
     replace(/'/g, '&#039;');
}
 16
Author: Kornel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-14 11:42:06

Recientemente descubrí node-validatorpor chriso.

Ejemplo

get('/', function (req, res) {

  //Sanitize user input
  req.sanitize('textarea').xss(); // No longer supported
  req.sanitize('foo').toBoolean();

});

Desaprobación de la función XSS

La función XSS ya no está disponible en esta biblioteca.

Https://github.com/chriso/validator.js#deprecations

 15
Author: Baggz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-26 04:46:15

También puedes mirar ESAPI. Hay una versión de javascript de la biblioteca. Es bastante resistente.

 5
Author: jeandenis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-07 03:29:53

En las versiones más recientes del módulo validator puede usar el siguiente script para evitar ataques XSS:

  var validator = require('validator');

  var escaped_string = validator.escape(someString);
 3
Author: Paramore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-31 10:28:46

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

 1
Author: Shivanshu Goyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-12 15:31:56