Empêcher XSS dans javascript côté Node.js / server

Avez-vous une idée de comment prévenir les attaques XSS sur une application node.js? Toutes les librairies qui gèrent la suppression de javascript dans les hrefs, les atsortingbuts onclick, etc. des données POSTed?

Je ne veux pas avoir à écrire une regex pour tout ça 🙂

Aucune suggestion?

Une des réponses à Sanitize / Rewrite HTML sur le côté client suggère d’emprunter l’assainisseur HTML basé sur la liste blanche dans JS de Google Caja qui, pour autant que je puisse le voir, permet d’installer un parsingur HTML SAX DOM du navigateur.

Mise à jour: N’oubliez pas non plus que le désinfectant Caja a été soumis à un examen de sécurité complet et professionnel alors que les expressions rationnelles sont très faciles à taper sur le plan de la sécurité.

Mise à jour du 24/09/2017: Il existe également maintenant DOMPurify . Je ne l’ai pas encore utilisé, mais il semble que tout soit conforme ou supérieur à ce que je recherche:

  • S’appuie sur les fonctionnalités fournies par l’environnement d’exécution dans la mesure du possible. (Important à la fois pour les performances et pour optimiser la sécurité en s’appuyant autant que possible sur des implémentations éprouvées et matures.)

    • S’appuie sur le DOM d’un navigateur ou jsdom pour Node.JS.
  • Configuration par défaut conçue pour supprimer le moins possible tout en garantissant la suppression du javascript.

    • Prend en charge HTML, MathML et SVG
    • Retour à la propriété exclusive, non configurable de toStaticHTML , toStaticHTML sous IE8 et IE9.
  • Très configurable, ce qui le rend approprié pour imposer des limitations sur une entrée pouvant contenir du code HTML arbitraire, tel qu’un champ de commentaire WYSIWYG ou Markdown. (En fait, c’est le haut de la stack ici)

    • Prend en charge la liste blanche / atsortingbutaire de balises / atsortingbuts habituels et la liste blanche de regex d’URL
    • Possède des options spéciales pour améliorer la qualité de certains types courants de métacaractères de modèles HTML.
  • Ils sont sérieux au sujet de la compatibilité et de la fiabilité

    • Tests automatisés exécutés sur 16 navigateurs différents ainsi que trois versions majeures différentes de Node.JS.
    • Pour garantir que les développeurs et les hôtes CI sont tous sur la même page, les fichiers de locking sont publiés.

J’ai créé un module qui regroupe le désinfectant HTML Caja

 npm install sanitizer 

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

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

Tout commentaire apprécié.

Toutes les techniques habituelles s’appliquent également à la sortie node.js, ce qui signifie:

  • Les listes noires ne fonctionneront pas.
  • Vous n’êtes pas censé filtrer les entrées afin de protéger la sortie HTML. Cela ne marchera pas ou fonctionnera en malformant inutilement les données.
  • Vous êtes censé échapper du texte HTML dans la sortie HTML.

Je ne suis pas sûr si node.js est livré avec une fonction intégrée pour cela, mais quelque chose comme ça devrait faire l’affaire:

 function htmlEscape(text) { return text.replace(/&/g, '&'). replace(/ replace(/"/g, '"'). replace(/'/g, '''); } 

J’ai récemment découvert le validateur de nœuds par chriso .

Exemple

 get('/', function (req, res) { //Sanitize user input req.sanitize('textarea').xss(); // No longer supported req.sanitize('foo').toBoolean(); }); 

Exclusion de la fonction XSS

La fonction XSS n’est plus disponible dans cette bibliothèque.

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

Vous pouvez également regarder ESAPI . Il existe une version javascript de la bibliothèque . C’est assez robuste.

Dans les nouvelles versions du module de validator vous pouvez utiliser le script suivant pour empêcher les attaques XSS:

  var validator = require('validator'); var escaped_ssortingng = validator.escape(someSsortingng); 

Essayez le module ssortingp-js module npm. Il effectue les actions suivantes:

  • Assainit HTML
  • Supprime les balises de script
  • Supprime les atsortingbuts tels que “onclick”, “onerror”, etc. qui contiennent du code JavaScript
  • Supprime les atsortingbuts “href” contenant du code JavaScript

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