Heim >Backend-Entwicklung >C++ >Ist Newtonsoft JSONs TypenameHandling.all ein Sicherheitsrisiko?
Newtonsoft JSON TypeNameHandling.All
: Sicherheitsimplikationen
Newtonsoft JSONs Dokumentation warnt stark davor, TypeNameHandling.All
für die Deserialisierung von JSON aus nicht vertrauenswürdigen Quellen zu verwenden. In diesem Artikel wird die potenziellen Sicherheitslücken in dieser Einstellung untersucht und umrissen Minderungsstrategien.
Schwachstellen von TypeNameHandling.All
Die Einstellung TypeNameHandling.All
ermöglicht es Newtonsoft JSON, Typen basierend auf Metadaten innerhalb der JSON -Nutzlast zu instanziieren. Dies schafft zwar ein erhebliches Sicherheitsrisiko. Ein Angreifer kann böswillige JSON herstellen, das die Deserialisierung schädlicher Typen zwingt und zu einer willkürlichen Codeausführung führt.
Zum Beispiel könnte eine gutartige JSON -Nutzlast so aussehen:
<code class="language-json">{ "$type": "Car", "Maker": "Ford", "Model": "Explorer" }</code>
Ein böswilliger Schauspieler könnte jedoch eine Nutzlast erstellen, die auf einen Typ auf Systemebene abzielt:
<code class="language-json">{ "$type": "System.CodeDom.Compiler.TempFileCollection", "BasePath": "%SYSTEMDRIVE%", "KeepFiles": "false", "TempDir": "%SYSTEMROOT%" }</code>
Dies würde dazu führen, dass Newtonsoft JSON eine TempFileCollection
-Schunierung erstellt und möglicherweise beliebige Dateien auf dem System löscht, indem BasePath
und TempDir
und
Effektive Minderung: benutzerdefiniert SerializationBinder
Der Schlüssel zur Sicherung von JSON -Deserialisierung mit Typinformationen ist die Verwendung eines benutzerdefinierten SerializationBinder
. Dies ermöglicht eine strenge Kontrolle darüber, welche Typen während der Deserialisierung zulässig sind, was die Instanziierung von böswilligen Typen effektiv verhindert.
Implementieren eines benutzerdefinierten SerializationBinder
umfassen die folgenden Schritte:
IBindingSerializer
-Rumentation implementiert. BindToName
zur Durchsetzung der Typvalidierung. Dies beinhaltet normalerweise die Überprüfung des Typs mit einer Whitelist oder einer schwarzen Liste. SerializationBinder
mit dem Newtonsoft JSON Serializer. Durch die Implementierung dieser Schritte können Sie JSON sicher von externen Quellen deserialisieren und gleichzeitig potenziell schädliche Instanziationen verhindern. Dieser proaktive Ansatz verringert das Risiko einer Ausbeutung erheblich.
Das obige ist der detaillierte Inhalt vonIst Newtonsoft JSONs TypenameHandling.all ein Sicherheitsrisiko?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!