Avez-vous une idée de la façon de prévenir les attaques XSS sur une application node.js? Toutes les bibliothèques qui gèrent la suppression de javascript dans les hrefs, les attributs onclick, etc. à partir de données postées?
Je ne veux pas avoir à écrire une regex pour tout ça :)
Aucune suggestion?
L’une des réponses à Sanitize/Rewrite HTML côté client suggère d’emprunter le désinfectant HTML basé sur une liste blanche dans JS de Google Caja, qui implémente un analyseur syntaxique HTML SAX. sans compter sur le DOM du navigateur.
Mise à jour: N'oubliez pas non plus que l'assainisseur Caja a apparemment été soumis à un examen complet et professionnel de la sécurité, tandis que les expressions rationnelles sont réputées pour leur facilité à taper des fautes de sécurité pour des raisons de sécurité.
Mise à jour du 24/09/2017: Il existe également maintenant DOMPurify . Je ne l'ai pas encore utilisé, mais on dirait qu'il respecte ou dépasse tous les points que je recherche:
S'appuie sur les fonctionnalités fournies par l'environnement d'exécution chaque fois que possible. (Important tant pour les performances que pour maximiser la sécurité en s'appuyant autant que possible sur des implémentations bien testées et matures.)
Configuration par défaut conçue pour éliminer le moins possible tout en garantissant la suppression de javascript.
toStaticHTML
de Microsoft, non configurable, sous IE8 et IE9.Hautement configurable, le rendant apte à appliquer des limitations sur une entrée pouvant contenir du code HTML arbitraire, telle qu'un champ de commentaire WYSIWYG ou Markdown. (En fait, c'est le sommet de la pile ici)
Ils sont sérieux au sujet de la compatibilité et de la fiabilité
J'ai créé un module qui regroupe l'assainisseur 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 de node.js, ce qui signifie:
Je ne sais pas si node.js est livré avec un logiciel intégré pour cela, mais quelque chose comme ça devrait faire l'affaire:
function htmlEscape(text) {
return text.replace(/&/g, '&').
replace(/</g, '<'). // it's not neccessary to escape >
replace(/"/g, '"').
replace(/'/g, ''');
}
J'ai récemment découvert node-validator by chriso .
get('/', function (req, res) {
//Sanitize user input
req.sanitize('textarea').xss(); // No longer supported
req.sanitize('foo').toBoolean();
});
La fonction XSS n'est plus disponible dans cette bibliothèque.
Vous pouvez aussi regarder ESAPI . Il existe une version de la bibliothèque javascript . C'est assez robuste.
Dans les versions plus récentes du module validator
, vous pouvez utiliser le script suivant pour empêcher une attaque XSS:
var validator = require('validator');
var escaped_string = validator.escape(someString);
Essayez le module npm strip-js
. Il effectue les actions suivantes:
Vous devriez essayer la bibliothèque npm "insane" . https://github.com/bevacqua/insane
J'essaye en production, ça marche bien. La taille est très petite (environ ~ 3kb gzipped).
La documentation est très facile à lire et à comprendre . https://github.com/bevacqua/insane