57 votes

Problèmes de sécurité liés à Node.js Express Framework

Nœud de cadres, comme l'Express, sont encore jeunes et je suis inquiet au sujet de la sécurité de mes données des utilisateurs. J'ai entendu parler de plusieurs vulnérabilités, mais j'ai moins entendu sur leur recours. J'espérais que je pourrais obtenir certains de vos pensées sur les meilleures pratiques.

Quels modules doivent être ajoutés à un Node/projet de l'Express pour améliorer la sécurité?

Quelles sont les questions encore en suspens?

Pour clarifier, Ruby on Rails est livré avec beaucoup de fonctionnalités de sécurité élégamment construit en (ex. protect_from_forgery), mais il est moins évident de ce Nœud fonctions de cadres (comme l'Express) ont à offrir et ce qui reste à être corrigé à l'aide de modules.

En particulier, je suis inquiet à propos de choses qui font peur comme:

  • Les Vulnérabilités d'Injection (JavaScript, SQL, Mongo, HTML)
  • Fixation de Session et d'un détournement
  • Cross-Site Vulnérabilités (Scripting, Request Forgery)
  • La Mesure De Masse
  • insérer une préoccupation de premier plan ici

Quelles sont vos pensées? Dois-je garder à l'aide de Rails et d'attendre pour le Nœud à maturité, ou il y a des solutions que je peux utiliser maintenant?

Je vous remercie beaucoup pour votre temps et vos suggestions!

----------

Quelques ressources que j'ai trouvé:

Excellent talk (11/2012): http://lanyrd.com/2012/asfws/sxzbm/ (voir les diapositives)

ServerFault question (2011-2012): http://serverfault.com/questions/285123/is-node-js-mature-for-enterprise-security

Blog sur le sujet (9/2012): http://codefol.io/posts/29-Why-Rails-and-not-Sinatra-or-Node-js-

Exploiter testeur: https://code.google.com/p/skipfish/

Module du passeport: https://github.com/jaredhanson/passport

EveryAuth Module: https://github.com/bnoguchi/everyauth

45voto

Adam Baldwin Points 391

J'ai écrit un post de blog qui donne un excellent point de départ sur l'Écriture Sécurisé Express.js des Apps. Il couvre un peu d'autres choses au-delà de csrf et casque a été mentionné par zeMirco.

L'autre chose est que vous ne pouvez pas comparer express.js pour les rails. Ils sont les pommes et les oranges. Par exemple, il n'y a pas d'ORM qui est fourni avec l'Express, que la mise en œuvre ou l'utilisation d'un tiers de module est jusqu'à vous.

Je vais essayer de donner une liste de chaque de vos préoccupations.

-Injection Vulnerabilities (JavaScript, SQL, Mongo, HTML)

Encore une fois, ce sont des choses qui ne sont pas intégrés express. La chose la plus proche serait XSS inquiétudes sur l'injection dans les modèles. Jade ou EJS modèles qui sont couramment utilisés avec express le codage de sortie < > "" et & par défaut, mais rappelez-vous il y a d'autres contextes, comme la saisie de l'utilisateur en JavaScript ou CSS, que vous auriez besoin de s'inquiéter.

-Session fixation and hijacking

De nouveau voir le blog ci-dessus, mais l'Express est basé sur et utilise la plupart de la connecter middleware l'un de ces est la session de middleware. Chose la plus importante ici est de définir correctement votre cookie drapeaux.

-Cross-Site Vulnerabilities (Scripting, Request Forgery)

Voir ci-dessus. Il est également livré avec express.csrf() middleware. Le blog mentionné montre comment la mettre en œuvre.

-Mass Assignment

Pas de problème avec express.js comme il n'a pas de concepts dans lesquels ce type d'vulnérables serait applicable, cependant la logique personnalisée que vous écrivez peut être en fait vulnérables à ce problème, donc encore une fois c'est un problème de vérifier si votre code est vulnérable, ou si le tiers de module que vous avez utilisé est...

9voto

zemirco Points 5419

Deux modules auxquels je peux immédiatement penser:

  1. CSRF : middleware de protection CRSF.
  2. casque : middleware qui implémente divers en-têtes de sécurité

7voto

superjoe30 Points 6876

Une chose à laquelle il faut se méfier, c'est bodyParser. Voir http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

1voto

Eric Elliott Points 948

Vous devez être conscient que si vous spécifiez un fourre-tout gestionnaire d'erreur, vous ne devez PAS redémarrer le serveur ou de faire quelque chose de blocage que gestionnaire en réponse à l'UTILISATEUR des erreurs ( 4xx de la gamme) car elle pourrait conduire à un déni de service à la vulnérabilité. Cette vulnérabilité est adressée automatiquement en express-error-handler, et le service s'arrête dès qu'il le peut (lors de connexions actives sont drainés ou un délai d'attente se produit) donc redémarre ne devrait pas être un gros problème. La mise en œuvre de ce comportement fait vraiment une grande différence dans ma exploiter des tests.

BTW, il n'est PAS sûr de simplement ignorer toutes les erreurs non gérées. Qui laisserait de votre application dans un état indéfini, qui présente un autre type de DOS de la vulnérabilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X