Was ist eine JSON-Injection und wie kann man sie verhindern?
JSON (JavaScript Object Notation)ist ein offenes Standard-Datenaustauschformat, das zur Kommunikation zwischen Anwendungen verwendet wird. JSON ähnelt XML, ist jedoch aufgrund seiner sehr leichten Beschaffenheit (kleine Dateigröße) einfacher zu lesen als XML.
JSON wurde von JavaScript abgeleitet – der Programmiersprache des Webs und der weltweit beliebtesten. Dies macht es zum bevorzugten Datenaustauschformat im Internet. Obwohl es der Syntax von JavaScript-Objektliteralen sehr ähnelt, kann es unabhängig von JavaScript verwendet werden und viele Programmierumgebungen bieten die Möglichkeit, JSON zu lesen (zu analysieren) und zu generieren.
JSON liegt als Zeichenfolge vor – nützlich, wenn Sie Daten über ein Netzwerk übertragen möchten. Es muss jedoch in ein natives JavaScript-Objekt konvertiert werden, wenn Sie auf die Daten zugreifen möchten. JavaScript stellt ein globales JSON-Objekt mit verfügbaren Methoden zum Konvertieren eines nativen Objekts in einen String (Serialisierung) und zum Konvertieren eines Strings in ein natives Objekt (Deserialisierung) bereit. Eine JSON-Zeichenfolge kann in einer eigenen Datei gespeichert werden – die im Grunde nur eine Textdatei mit der Erweiterung .json und einem MIME-Typ von application/json ist –, die im Grunde eine Erweiterung des Internet-E-Mail-Protokolls ist, das seinen Benutzern den Austausch ermöglicht verschiedene Arten von Daten wie Bilder, Audio- und Videodateien über das Internet.
Viele Webanwendungen nutzen es, um wichtige Informationen zu speichern und miteinander zu kommunizieren. JSON wird bei der Speicherung von Daten häufig wie zwischengespeicherte Daten behandelt und kann möglicherweise vertrauliche Informationen enthalten. JSON wird häufig in Verbindung mit verwendet RESTful-APIs und AJAX-Anwendungen zur Übertragung sensibler Informationen wie Authentifizierungsdaten, wenn sie zum Senden von Nachrichten verwendet werden.
Die weit verbreitete Verwendung von JSON in Webanwendungen macht es zu einem Ziel für böswillige Aktivitäten. JSON allein stellt keine große Bedrohung dar. Schließlich handelt es sich lediglich um ein Datenaustauschformat. Die eigentlichen Sicherheitsbedenken bei JSON ergeben sich aus der Art und Weise, wie es verwendet wird. Bei Missbrauch können JSON-basierte Anwendungen anfällig für Angriffe wie JSON-Hijacking und JSON-Injection werden. In diesem Artikel wird alles über JSON-Injection-Angriffe besprochen, einschließlich der Art und Weise, wie man sie erkennt und verhindert.

Was ist ein JSON-Injection-Angriff und wie funktioniert er?
Injektionsangriffe in Webanwendungen sind Cyberangriffe, die darauf abzielen, bösartigen Code in eine Anwendung einzuschleusen, um deren normale Ausführung zu verändern. Injektionsangriffe können zu Datenverlust, Datenänderung und Denial-of-Service führen. Daher wird es in der Liste der größten Sicherheitsrisiken für Webanwendungen aufgeführt OWASP Top 10 .
Die JSON-Injection ist ein typisches Beispiel für einen Injektionsangriff, obwohl sie nicht so häufig und gefährlich ist wie die andere Form des Injektionsangriffs, z SQL-Injektion . Die Semantik von JSON-Dokumenten und Ausgabenachrichten kann sich erheblich ändern, wenn eine Anwendung JSON aus nicht vertrauenswürdigen oder nicht validierten Eingaben erstellt. Ein Angreifer kann die Lücke ausnutzen, um Schadcodes einzuschleusen, die die normale Ausführung des Programms verändern können. In einigen Fällen kann die JSON-Injektion dazu führen Cross-Site-Scripting oder Dynamische Code-Bewertung .
JSON wurde traditionell mit einer eval()-Funktion analysiert, dies ist jedoch eine unsichere Vorgehensweise. Jeder Code, der eval() verwendet, um JSON in ein JavaScript-Objekt zu deserialisieren, ist anfällig für JSON-Injection-Angriffe.
Die JSON-Injektion erfolgt, wenn:
- Daten aus einer nicht vertrauenswürdigen Quelle werden vom Server nicht bereinigt und direkt in einen JSON-Stream geschrieben. Dies wird als serverseitige JSON-Injection bezeichnet.
- Daten aus einer nicht vertrauenswürdigen Quelle werden nicht direkt mit der JavaScript-Bewertungsfunktion bereinigt und analysiert. Dies wird als clientseitige JSON-Injection bezeichnet.
Um zu demonstrieren, wie ein serverseitiger JSON-Injection-Angriff funktioniert, betrachten wir eine Webanwendung, die die Eingabe von Benutzernamen und Passwörtern von Benutzern ohne Bereinigung akzeptiert. Die vom Benutzer bereitgestellten Daten (Benutzername, Passwort und Kontotyp) werden serverseitig als JSON-String gespeichert. Die JSON-Zeichenfolge wird durch einfache Verkettung gebildet, wie im folgenden Code gezeigt:
|_+_|Da die Anwendung die Eingabedaten nicht bereinigt, hat ein böswilliger Benutzer beschlossen, unerwartete Daten an seinen Benutzernamen anzuhängen: |_+_|
Folglich wird die resultierende JSON-Zeichenfolge zu:
{ 'Konto':'Benutzer