Maison > développement back-end > C++ > Le TypeNameMandling de Newtonsoft JSON est-il sûr pour la désérialisation des données JSON externes?

Le TypeNameMandling de Newtonsoft JSON est-il sûr pour la désérialisation des données JSON externes?

Susan Sarandon
Libérer: 2025-01-31 16:31:09
original
407 Les gens l'ont consulté

Is Newtonsoft JSON's TypeNameHandling Safe for Deserializing External JSON Data?

Newtonsoft JSON's TypeNameHandling: une considération de sécurité pour JSON externe

La bibliothèque JSON de Newtonsoft propose TypeNameHandling pour désérialiser les informations de type contenant JSON. Cependant, l'utilisation de cela avec des sources JSON externes non fiables présente des risques de sécurité importants.

Risques de sécurité de désérialisation JSON externe avec TypeNameHandling.All

sans SerializationBinder, TypeNameHandling.All permet au désérialiseur de créer des instances de tout type spécifié dans les métadonnées JSON. Cela ouvre une vulnérabilité aux acteurs malveillants qui pourraient envoyer des types nocifs présents dans votre application ou le framework .NET.

Exemple de vulnérabilité:

Considérons une classe simple Car:

<code class="language-csharp">public class Car
{
    public string Maker { get; set; }
    public string Model { get; set; }
}</code>
Copier après la connexion

Une charge utile JSON apparemment inoffensive:

<code class="language-json">{
   "$type": "Car",
   "Maker": "Ford",
   "Model": "Explorer"
}</code>
Copier après la connexion

... désérialiserait correctement. Cependant, un acteur malveillant pourrait créer une charge utile ciblant une classe système comme System.CodeDom.Compiler.TempFileCollection:

<code class="language-json">{
   "$type": "System.CodeDom.Compiler.TempFileCollection",
   "BasePath": "%SYSTEMDRIVE%",
   "KeepFiles": "False",
   "TempDir": "%SYSTEMROOT%"
}</code>
Copier après la connexion

TempFileCollection, une classe sérialisable gérant des fichiers temporaires, a un finalizer qui supprime des fichiers sur la collection de déchets. Une charge utile malveillante pourrait indiquer ce finalizer vers des fichiers arbitraires sur le système de la victime, entraînant une suppression involontaire des fichiers sans interaction utilisateur. Ce n'est qu'un exemple; De nombreuses autres classes système pourraient être exploitées de manière similaire.

Par conséquent, utilisez toujours un SerializationBinder lorsque la désérialisation du JSON à partir de sources externes avec TypeNameHandling a permis d'atténuer ces risques. Autoriser la désérialisation des types que vous faites explicitement confiance et contrôlez.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal