Node.js: So kannst du deine Applikation schützen

Mehr Sicherheit für Node.js (Bild: © tiero - Fotolia.com)
Gergely Nemeth hat in seinem Blog einige gute Hinweise geliefert, wie ihr die Sicherheit euerer Applikationen erhöhen könnt. In diesem Artikel zeigen wir euch einen Auszug.
Wer seinen Code vor „Injections“ schützen möchte, sollte auf eval
verzichten. Gerade wenn ihr eval
für Benutzereingaben benutzt, tritt diese Lücke auf. Außerdem verlangsamt eval
den Interpreter.
Mit dem Flag 'use strict';
könnt ihr unischtbare Fehler sichtbar machen und ihr werdet auf diese auch aufmerksam gemacht. Einige Beispiele:
"use strict";
delete Object.prototype; // TypeError
"use strict";
var obj = {
a: 1,
a: 2
};
// syntax error
Ihr könnt eine vollständige Liste dieser „unsichtbaren Fehler“ bei Mozilla einsehen.
Egal ob ihr JSLint, JSHint oder ESLint nutzt: Statische Codeanalysen helfen euch dabei viele Fehler bereits während des Schreibens zu entdecken.
Kaum jemand möchte seinen Code auch intensiv testen – sei es aus „Kostengründen“ oder weil ihr einfach ungern Unit-Tests schreibt. Tests sind aber eine Notwendigkeit und sollten daher durchgeführt werden, um zu gewährleisten, dass die App auch wirklich das tut, was in der Anforderungsanalyse festgelegt wurde. Natürlich sind Unit-Tests alleine nicht das einzige mittel, aber: Kennt ihr eigentlich die Test-Pyramide?
Der Applikation alle Rechte zu geben ist nicht in Ordnung, nur damit die App die Möglichkeit hat, an den Ports 80 und 443 zu lauschen. Statt dessen solltet ihr einen HTTP-Proxy aufsetzen, der die Anfragen durchleitet – dabei ist egal ob nginx oder Apache.
child_process.exec('ls', function (err, data) {
console.log(data);
});
Im Hintergrund wird bei child-process.exec
nämlich /bin/sh
ausgeführt. Somit ist es ein bash
-Interpreter und kein Launcher. Problematisch wird dieser Umstand, wenn Benutzereingaben durch diese Methode wandern, die dann wiederum schädlichen Code ausführen könnten.
Ein Einfacher Fix dazu ist die Verwendung von child_process.execFile
Mehr zu Command Injections gib es hier.
Mehr zu Node.js-Sicherheit und weiteren Beispielen findet ihr hier und beim „Node.js Security Project“.
Ebenfalls interessant:
Bitte beachte unsere Community-Richtlinien
Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.
Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.
Dein t3n-Team
sudeo node app.js ist böse => sudo node app.js ist böse
Tippfehler im Artikel: Es sollte sudo statt sudeo heißen :)
@Daniel @xomz Danke für den Hinweis :)
Fehlerteufel: Mit dem Flag ‚use strict‘; könnt ihr !!! unischtbare!!! Fehler sichtbar machen …