
Programmierer erobern die Sicherheit: Serie „Teilen und Lernen“ — NoSQL Injection
NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.
Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.
NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.
Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:
NoSQL Injection verstehen
NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.
NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.
Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.
MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.
Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.
Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.
MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.
Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.
Erfahren Sie, warum NoSQL Injection gefährlich ist
NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.
Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.
Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.
Besiegen Sie NoSQL Injection
Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:
- Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
- Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
- Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
- Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
- Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
- Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.
Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.
Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.
Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.
Zusammenfassend haben wir Folgendes:
- Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
- Benutze Treiber, die dir weiterhelfen, wie Mongoose
- Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
- Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.
NoSQL ist nicht No Injections
NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.
NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.
Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!
Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:
Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!


NoSQL-Datenbanken werden immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, aber mit zunehmender Nutzung kommen unweigerlich weitere Sicherheitslücken zum Vorschein.
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior ist für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Eine Demo buchenJaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.


NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.
Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.
NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.
Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:
NoSQL Injection verstehen
NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.
NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.
Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.
MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.
Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.
Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.
MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.
Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.
Erfahren Sie, warum NoSQL Injection gefährlich ist
NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.
Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.
Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.
Besiegen Sie NoSQL Injection
Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:
- Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
- Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
- Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
- Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
- Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
- Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.
Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.
Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.
Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.
Zusammenfassend haben wir Folgendes:
- Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
- Benutze Treiber, die dir weiterhelfen, wie Mongoose
- Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
- Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.
NoSQL ist nicht No Injections
NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.
NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.
Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!
Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:
Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!

NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.
Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.
NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.
Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:
NoSQL Injection verstehen
NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.
NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.
Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.
MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.
Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.
Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.
MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.
Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.
Erfahren Sie, warum NoSQL Injection gefährlich ist
NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.
Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.
Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.
Besiegen Sie NoSQL Injection
Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:
- Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
- Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
- Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
- Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
- Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
- Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.
Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.
Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.
Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.
Zusammenfassend haben wir Folgendes:
- Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
- Benutze Treiber, die dir weiterhelfen, wie Mongoose
- Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
- Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.
NoSQL ist nicht No Injections
NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.
NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.
Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!
Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:
Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!

Klicken Sie auf den Link unten und laden Sie das PDF dieser Ressource herunter.
Secure Code Warrior ist für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Bericht ansehenEine Demo buchenJaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.
NoSQL-Datenbanken sind wird immer beliebter. Es ist schwer zu leugnen, dass sie schnell und einfach mit unstrukturierten Daten umgehen können, insbesondere angesichts der Tatsache, dass Entwicklungsteams mit zunehmend agilen Methoden arbeiten.
Entwickler brauchen Zeit, um Sicherheitslücken und andere Herausforderungen in neuen Technologien zu beheben. Erst wenn es einige Zeit in Produktionsanwendungen eingesetzt wurde, treten Probleme an die Oberfläche.
NoSQL-Datenbanken sind ähnlich. Es gibt wichtige Risiken, derer sich Entwickler bewusst sein sollten, damit sie ihre Anwendungen schützen können. Ein solches Risiko ist die NoSQL-Injektion.
Schauen wir uns an, was eine NoSQL-Injektion ist, welchen Schaden sie anrichten kann und wie sie behoben werden kann:
NoSQL Injection verstehen
NoSQL-Injection wird durch viele der gleichen Injection-Schwachstellen wie XML oder SQL-Injektion.
NoSQL-Injection ermöglicht es Angreifern, beliebige Befehle in eine NoSQL-Abfrage einzufügen. Dadurch können sie Daten stehlen und sogar Änderungen an der Datenbank vornehmen, wenn ihre Rechte hoch genug sind.
Wenn eine Anwendung benutzergesteuerte Daten direkt in einen NoSQL-Abfrageausdruck einfügt, übernehmen diese Ausdrücke oft Funktionen oder verfügen über eingebaute Operatoren, die manipuliert werden können, um Daten zu stehlen oder zu ändern. Und wenn so etwas mit böswilliger Absicht ausgeführt wird, können die Folgen gravierend sein.
MongoDB-Datenbanken sind einer der beliebtesten Spielplätze, um diese Sicherheitsanfälligkeit auszunutzen. „$ne: „" 'ist der Operator, der 1=1 in der SQL-Welt entspricht. Ein Angreifer könnte also beispielsweise die Zeichen „$ne:"“ 'in die Felder für Benutzername und Passwort einer Benutzeroberfläche einfügen. Wenn der Code anfällig für NoSQL-Injection ist, sucht die Datenbank nach allen Datensätzen, bei denen der Benutzername und das Passwort keiner leeren Zeichenfolge entsprechen. Mit anderen Worten: alle. Huch.
Wenn diese Datenbank unverschlüsselt ist, könnte der Angreifer die Benutzernamen und Passwörter jedes einzelnen Benutzers darin stehlen. Dazu gehören der Benutzername und die Passwörter des Administrators, sodass dieser Zugriff auf die gesamte Datenbank hat.
Angreifer versuchen oft, Werte weiterzugeben, die immer wahr sind. Ein weiterer häufiger Angriff besteht darin, bösartigen Code in Eigenschaften einzuschleusen, die auf Funktionen festgelegt sind.
MongoDB verwendet beispielsweise eine Suchfunktion, die ein Objekt mit einer Eigenschaft namens $where akzeptiert. Die Eigenschaft $where ist auf eine Funktion gesetzt, die als wahr oder falsch ausgewertet werden sollte. Wenn diese Funktion durch Benutzereingaben in irgendeiner Weise geändert wird, lauert dort wahrscheinlich eine NoSQL-Injektion.
Einen ausführlichen Einblick in die Feinheiten der NoSQL-Injektion finden Sie hier InfoQ-Artikel.
Erfahren Sie, warum NoSQL Injection gefährlich ist
NoSQL-Injection ist vor allem deshalb gefährlich, weil sie von der Sicherheitsgemeinschaft noch nicht die Prüfung erhalten hat, die sie verdient.
Die Auswirkungen der NoSQL-Injection sind weitgehend dieselben wie bei der herkömmlichen SQL-Injection. Daten können gestohlen oder geändert werden, Konten können durch Datendiebstahl gefährdet werden, und, was vielleicht am schlimmsten ist, Daten könnten vollständig gelöscht werden, wenn ein Löschbefehl erfolgreich ausgeführt wird.
Unter dem Strich sind MongoDB und andere NoSQL-Datenbank-Engines anfällig für Angriffe. „Kein SQL“ bedeutet nicht, dass es keine Injektionen gibt.
Zum Glück nehmen es einige in der Community zur Kenntnis und das Wort verbreiten. Immer mehr Entwickler müssen sich weiterbilden, damit sie ihre Apps vor wenig bekannten Gefahren schützen können, die zu großen Kopfschmerzen führen können, wenn sie ausgenutzt werden.
Besiegen Sie NoSQL Injection
Die NoSQL-Injektion kann schwer zu besiegen sein. Leider gibt es nicht die Möglichkeit parametrisierter Abfragen wie bei der SQL-Injection. Es ist jedoch nicht unmöglich. Es gibt ein paar Möglichkeiten, dir zu helfen:
- Fuzzers können als eine Methode zur Erkennung von Sicherheitslücken verwendet werden. Obwohl, wie es bei vielen Dingen im Leben der Fall ist, der einfachste Ansatz der effektivste sein kann. Hier ist der gute alte Code-Review dein stärkster Verbündeter.
- Achten Sie beim Überprüfen des Codes auf mögliche Stellen, an denen Benutzereingaben den Wert eines Ausdrucks festlegen oder eine Funktion ändern könnten. Erlauben Sie nicht, dass Benutzereingaben Ihre Abfragen ändern.
- Stellen Sie sicher, dass Sie Benutzereingaben in die richtige Klasse umwandeln. Wenn es sich um eine Zahl handelt, wandeln Sie sie in eine Zahl um, wenn es sich um eine Zeichenfolge handelt, wandeln Sie sie in eine Zeichenfolge um und so weiter.
- Verwenden Sie niemals $where oder ähnliche eval-Funktionen zusammen mit Benutzereingaben. In den meisten Fällen können Sie das Problem umgehen, indem Sie das Datenmodell oder Schema ändern.
- Versuchen Sie es mit Mungo als dein MongoDB-Treiber. Mit Mongoose können Sie ein Schema für Ihre NoSQL-Datenbank definieren. Wenn du sag Mongoose, dass deine Eingaben Zeichenketten sind, sie werden in Saiten geworfen. Alle von einem Angreifer übergebenen Objekte werden also nicht als Objekte, sondern als Zeichenketten behandelt.
- Verhärte deine DB! Erstellen Sie Benutzerkonten mit geringen Rechten, maximieren Sie die Ausführungszeit für Abfragen und halten Sie sich stets an die bewährten Sicherheitsmethoden, die für Ihr Unternehmen gelten.
Ein Nachteil der Benutzerfreundlichkeit von NoSQL-Datenbanken ist die Tendenz der Entwickler, sie abzulegen und sie zu verwenden, ohne an Sicherheit zu denken.
Es ist wichtig, dass Sie sich die Zeit nehmen, um zu lernen, wie Sie eine NoSQL-Datenbank sicher einrichten und sich vor NoSQL-Injektionen schützen können.
Zum Beispiel MongoDB Enterprise Ausgabe verfügt über erweiterte Zugriffskontrollfunktionen für Ihre Dokumente. Die Durchsetzung der „geringsten Rechte“ kann eine gute Defense-in-Depth-Strategie (DiD) sein, falls jemand eine Sicherheitslücke in Ihrer Anwendung findet.
Zusammenfassend haben wir Folgendes:
- Bereinigen Sie Ihre Eingabe, bevor Sie sie in einem NoSQL-Abfrageausdruck verwenden
- Benutze Treiber, die dir weiterhelfen, wie Mongoose
- Führen Sie Code-Reviews durch, bei denen speziell untersucht wird, wie Eingabedaten in Abfragen verwendet werden
- Verwenden Sie Fuzzer und Scanner, um Sicherheitslücken in Ihrem Code zu finden.
NoSQL ist nicht No Injections
NoSQL-Datenbanken werden aufgrund ihrer skalierbaren Funktionen und ihrer Geschwindigkeit bei der Einrichtung immer beliebter. Die Neuheit der Technologie kann Entwickler dazu veranlassen, NoSQL-Datenbanken zu verwenden, ohne darüber nachzudenken, wie sie gesichert werden können.
NoSQL-Datenbanken können genauso anfällig für Injektionsangriffe sein wie SQL-Datenbanken. Seien Sie also vorsichtig und achten Sie auf Ihre Abfragen. Wenn Sie mehr erfahren möchten, schauen Sie sich unsere an Ressourcen zum Lernen oder testen Sie Ihre Fähigkeiten mit unserem kostenlose Demo.
Bereiten Sie sich im Voraus vor und Sie müssen sich keine Gedanken über NoSQL-Injektionen in Ihren Anwendungen machen. Zu einfach!
Denken Sie, Sie sind bereit, NoSQL-Injection jetzt zu lokalisieren, zu identifizieren und zu reparieren? Betritt die Secure-Code-Arena, Krieger:
Und das ist ein Abschluss für 2018! Dies wird unser letzter Beitrag für das Jahr sein, aber wir melden uns am 10. Januar 2019 mit dem nächsten Coders Conquer Security Guide zurück. Bis bald!
Inhaltsverzeichniss
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior ist für Ihr Unternehmen da, um Ihnen zu helfen, Code während des gesamten Softwareentwicklungszyklus zu sichern und eine Kultur zu schaffen, in der Cybersicherheit an erster Stelle steht. Ganz gleich, ob Sie AppSec-Manager, Entwickler, CISO oder jemand anderes sind, der sich mit Sicherheit befasst, wir können Ihrem Unternehmen helfen, die mit unsicherem Code verbundenen Risiken zu reduzieren.
Eine Demo buchenHerunterladenRessourcen für den Einstieg
Themen und Inhalte der Securecode-Schulung
Unsere branchenführenden Inhalte werden ständig weiterentwickelt, um der sich ständig ändernden Softwareentwicklungslandschaft unter Berücksichtigung Ihrer Rolle gerecht zu werden. Themen, die alles von KI bis XQuery Injection abdecken und für eine Vielzahl von Rollen angeboten werden, von Architekten und Ingenieuren bis hin zu Produktmanagern und QA. Verschaffen Sie sich einen kleinen Einblick in das Angebot unseres Inhaltskatalogs nach Themen und Rollen.
Threat Modeling with AI: Turning Every Developer into a Threat Modeler
Walk away better equipped to help developers combine threat modeling ideas and techniques with the AI tools they're already using to strengthen security, improve collaboration, and build more resilient software from the start.
Ressourcen für den Einstieg
Cybermon is back: Beat the Boss KI-Missionen jetzt auf Abruf verfügbar
Cybermon 2025 Beat the Boss ist jetzt das ganze Jahr über in SCW verfügbar. Setzt fortschrittliche KI/LLM-Sicherheitsanforderungen ein, um die sichere KI-Entwicklung in einem großen Maßstab zu stärken.
Cyber-Resilienz-Gesetz erklärt: Was das für die Entwicklung von Secure by Design-Software bedeutet
Erfahren Sie, was der EU Cyber Resilience Act (CRA) verlangt, für wen er gilt und wie sich Entwicklungsteams mit sicheren Methoden, der Vorbeugung von Sicherheitslücken und dem Aufbau von Fähigkeiten für Entwickler darauf vorbereiten können.




%20(1).avif)
.avif)
