Heim >Backend-Entwicklung >C++ >Verwendet 'typenameHandling.all' in newtonsoft.json sicher, um nicht vertrauenswürdige Daten zu verdessten?

Verwendet 'typenameHandling.all' in newtonsoft.json sicher, um nicht vertrauenswürdige Daten zu verdessten?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-31 16:26:09368Durchsuche

newtonsoft.jsons TypeNameHandling.All: Sicherheitsrisiken bei der Deserialisierung nicht vertrauenswürdiger Daten

Die TypeNameHandling Eigenschaft in newtonsoft.json schreibt vor, wie polymorphe Objekte deserialisiert werden. Durch das Einstellen von TypeNameHandling.All können Newtonsoft.json Typen basierend auf der Eigenschaft $type innerhalb des eingehenden JSON instanziieren. Dies zeigt jedoch erhebliche Sicherheitslücken beim Umgang mit nicht vertrauenswürdigen Daten.

Is Using `TypeNameHandling.All` in Newtonsoft.Json Safe for Deserializing Untrusted Data?

Sicherheitsimplikationen

bösartige Schauspieler können TypeNameHandling.All ausnutzen, indem sie eine $type -Regie injizieren, die einen schädlichen Typ innerhalb des JSON angeben. Auf diese Weise können sie beliebiger Code ausführen oder unerwünschte Aktionen im Zielsystem ausführen.

Betrachten Sie eine scheinbar harmlose Klasse:

<code class="language-csharp">public class Vehicle
{
    public string Make { get; set; }
    public string Model { get; set; }
}</code>

Eine böswillige JSON -Nutzlast könnte so aussehen:

<code class="language-json">{
  "$type": "System.Diagnostics.Process",
  "Make": "Attack",
  "Model": "DeleteC:\ImportantFiles"
}</code>

Während die Eigenschaften Make und Model gutartig sind, zwingt die $type -Spertion die Erstellung eines System.Diagnostics.Process -Objekts, was möglicherweise schädliche Prozesse auf dem System initiiert. Dies umgeht die Überprüfung des normalen Typs und öffnet die Tür für verschiedene Angriffe.

mildern das Risiko

Um solche Angriffe zu verhindern, vermeiden Sie die Verwendung von TypeNameHandling.All, wenn JSON von externen, nicht vertrauenswürdigen Quellen dessen deserialisiert. Verwenden Sie stattdessen TypeNameHandling.None, um die Typenverarbeitung vom Typ Namen zu deaktivieren. Implementieren Sie alternativ ein benutzerdefiniertes SerializationBinder, um sorgfältig zu steuern, welche Typen während der Deserialisierung zulässig sind, und die sicheren sicheren Typen. Dies bietet einen detaillierteren und sichereren Ansatz für die Umgang mit polymorpher Deserialisierung.

Das obige ist der detaillierte Inhalt vonVerwendet 'typenameHandling.all' in newtonsoft.json sicher, um nicht vertrauenswürdige Daten zu verdessten?. 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