Newtonsoft JSONs TypeNameHandling
: Eine Sicherheitsüberlegung für externe JSON
TypeNameHandling
zum Deserialisieren von JSON -enthaltenden Typinformationen. Wenn Sie dies jedoch mit nicht vertrauenswürdigen externen JSON -Quellen verwenden, ist dies erhebliche Sicherheitsrisiken.
Sicherheitsrisiken der Deserialisierung externer JSON mit TypeNameHandling.All
ohne ein SerializationBinder
, TypeNameHandling.All
ermöglicht es dem Deserializer, Instanzen aller in der JSON -Metadaten angegebenen Typen zu erstellen. Dies eröffnet eine Anfälligkeit für böswillige Akteure, die schädliche Typen in Ihrer Anwendung oder im .NET -Framework senden könnten.
Beispiel Verwundbarkeit:
Betrachten Sie eine einfache Car
Klasse:
<code class="language-csharp">public class Car { public string Maker { get; set; } public string Model { get; set; } }</code>
Eine scheinbar harmlose JSON -Nutzlast:
<code class="language-json">{ "$type": "Car", "Maker": "Ford", "Model": "Explorer" }</code>
... würde sich richtig deserialisieren. Ein böswilliger Schauspieler könnte jedoch eine Nutzlast herstellen, die auf eine Systemklasse wie System.CodeDom.Compiler.TempFileCollection
:
<code class="language-json">{ "$type": "System.CodeDom.Compiler.TempFileCollection", "BasePath": "%SYSTEMDRIVE%", "KeepFiles": "False", "TempDir": "%SYSTEMROOT%" }</code>
TempFileCollection
, eine serialisierbare Klasse, die temporäre Dateien verwaltet, verfügt über einen Finalizer, der Dateien nach der Müllsammlung löscht. Eine böswillige Nutzlast könnte diesen Finalizer auf willkürliche Dateien im System des Opfers verweisen, was zu einer unbeabsichtigten Löschung der Datei ohne Benutzerinteraktion führt. Dies ist nur ein Beispiel; Viele andere Systemklassen könnten auf ähnliche Weise ausgenutzt werden.
Verwenden Sie daher immer ein SerializationBinder
, wenn JSON von externen Quellen des Deserialisierens von externen Quellen mit TypeNameHandling
ermöglicht wird, diese Risiken zu mildern. Erlauben Sie nur die Deserialisierung von Typen, denen Sie ausdrücklich vertrauen und kontrollieren.
Das obige ist der detaillierte Inhalt vonIst Newtonsoft JSONs TypenameHandling sicher für die Deserialisierung externer JSON -Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!