
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 là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationJaap 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!

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.
Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Consulter le rapportRéserver une démonstrationJaap 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!
Table des matières
Jaap Karan Singh ist Secure Coding Evangelist, Chief Singh und Mitbegründer von Secure Code Warrior.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationTéléchargerRessources pour débuter
Thèmes et contenus de la formation Securecode
Nos contenus de pointe sont constamment développés afin de s'adapter à l'évolution constante du paysage du développement logiciel, en tenant compte de votre rôle. Les thèmes abordés couvrent tous les domaines, de l'IA à l'injection XQuery, et sont proposés pour une multitude de rôles, des architectes et ingénieurs aux chefs de produit et responsables assurance qualité. Nous vous invitons à découvrir un aperçu de notre catalogue de contenus classés par thème et par rôle.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour débuter
Cybermon est de retour : les missions KI « Beat the Boss » sont désormais disponibles sur demande.
Cybermon 2025 Beat the Boss est désormais disponible toute l'année dans SCW. Il utilise des exigences de sécurité IA/LLM avancées pour renforcer le développement sécurisé de l'IA à grande échelle.
Explication de la loi sur la cyber-résilience : implications pour le développement de logiciels sécurisés dès la conception
Découvrez les exigences de la loi européenne sur la cyber-résilience (CRA), à qui elle s'applique et comment les équipes de développement peuvent s'y préparer en adoptant des méthodes sécurisées, en prévenant les failles de sécurité et en renforçant les compétences des développeurs.
Facteur 1 : Critères de réussite définis et mesurables
Le catalyseur n° 1 inaugure notre série en dix parties intitulée « Les catalyseurs de la réussite » et démontre comment un codage sécurisé peut être associé à des résultats commerciaux tels que la réduction des risques et la rapidité afin d'atteindre une maturité programmatique à long terme.




%20(1).avif)
.avif)
