Heim >Backend-Entwicklung >C++ >Wie kann ich JSON mit TypenameHandling in C# sicher deserialisieren, um Sicherheitsrisiken zu vermeiden?

Wie kann ich JSON mit TypenameHandling in C# sicher deserialisieren, um Sicherheitsrisiken zu vermeiden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-31 16:21:09716Durchsuche

How Can I Safely Deserialize JSON with TypeNameHandling in C# to Prevent Security Risks?

TypenameHandling: Die Warngeschichte in JSONs Back -Sequentialisierung

im Bereich der Derivatisierung von JSON spielt das TypenameHandling -Spiel eine wichtige Rolle bei der Erklärung externer JSON -Daten. Obwohl es automatisch eine bestimmte Art von Instanz erstellen kann, muss es vorsichtig sein, wenn es sich um JSON -Daten aus der Quelle vertrauenswürdiger Quellen handelt.

Die Standardeinstellung typenameHandling. Alle sehen bequem aus, versteckt jedoch die Gefahr. Wenn die JSON -Daten Typ -Metadaten enthalten, wird JSON.net den im angegebenen Typ angegebenen Typ ausprobieren. Obwohl dies harmlos aussieht, kann der böswillige Code mit dieser Funktion ein gefährliches Objekt in Ihrer Anwendung erstellen.

Betrachten Sie dieses Beispiel: Geben Sie JSON -Daten des Autoobjekts an:

Verwenden von typenameHandling.all erstellt JSON.net eine neue Autoinstanz und füllt seine Attribute entsprechend aus. Der Angreifer kann jedoch die JSON -Struktur so ändern
<code>{
   "$type": "Car",
   "Maker": "Ford",
   "Model": "Explorer"
}</code>

Dieser bösartige JSON unterrichtet JSON.NET, ein Tempfilecollect -Objekt zu instanziieren, das Dateien auf dem System des Opfers ohne die unbekannte oder nicht gewillte Zustimmung des Opfers löscht.

<code>{
       "$type": "System.CodeDom.Compiler.TempFileCollection",
       "BasePath": "%SYSTEMDRIVE",
       "KeepFiles": "False",
       "TempDir": "%SYSTEMROOT%"
}</code>
Um diese Sicherheitsanfälligkeit zu lindern, verwenden Sie bei Verwendung typenameHandling.all zurück -Serialisierung JSON sollten Sie einen benutzerdefinierten Serialisierungsbinder verwenden. Dieser Ordner kann eine strenge Überprüfung und Inspektion durchführen, um sicherzustellen, dass die übertragenen Arten vor der Instanziierung sicher und zulässig sind. Durch diese vorbeugenden Maßnahmen können Sie verhindern, dass bösartige JSON die Integrität der Anwendung beschädigt.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON mit TypenameHandling in C# sicher deserialisieren, um Sicherheitsrisiken zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn