Heim >Backend-Entwicklung >C++ >Verwendet 'typenameHandling.all' in newtonsoft.json sicher, um nicht vertrauenswürdige Daten zu verdessten?
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.
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!