Maison > développement back-end > C++ > Est-ce que Newtonsoft JSON est de TynEnameHandling. Tous un risque de sécurité?

Est-ce que Newtonsoft JSON est de TynEnameHandling. Tous un risque de sécurité?

Mary-Kate Olsen
Libérer: 2025-01-31 16:36:15
original
232 Les gens l'ont consulté

Is Newtonsoft JSON's TypeNameHandling.All a Security Risk?

NewTonsoft JSON's TypeNameHandling.All: Implications de sécurité

La documentation de Newtonsoft JSON met fortement en vue de l'utilisation de TypeNameHandling.All pour désérialiser JSON à partir de sources non fiables. Cet article explore les vulnérabilités de sécurité potentielles associées à ce cadre et décrit les stratégies d'atténuation.

Vulnérabilités de TypeNameHandling.All

Le paramètre TypeNameHandling.All permet à Newtonsoft JSO de instancier des types en fonction des métadonnées dans la charge utile JSON. Bien que pratique, cela crée un risque de sécurité important. Un attaquant peut fabriquer des JSON malveillants qui force la désérialisation de types nocifs, conduisant à une exécution arbitraire du code.

Par exemple, une charge utile bénigne JSON peut ressembler à ceci:

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

Cependant, un acteur malveillant pourrait construire une charge utile ciblant un type au niveau du système:

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

Cela ferait que Newtonsoft JSON créerait une instance TempFileCollection, supprimant potentiellement des fichiers arbitraires sur le système en manipulant BasePath et TempDir.

ATTÉRIGATION EFFORME: Custom SerializationBinder

La clé pour sécuriser la désérialisation JSON avec les informations de type consiste à utiliser une personnalité SerializationBinder. Cela permet un contrôle strict sur les types autorisés pendant la désérialisation, empêchant efficacement l'instanciation de types malveillants.

La mise en œuvre d'une coutume SerializationBinder implique ces étapes:

  1. Créez une classe qui implémente l'interface IBindingSerializer.
  2. remplacer la méthode BindToName pour appliquer la validation du type. Cela implique généralement de vérifier le type contre une liste blanche ou une liste noire.
  3. Enregistrez votre personnalité SerializationBinder avec le sérialiseur JSON Newtonsoft.

En mettant en œuvre ces étapes, vous pouvez désérialiser en toute sécurité JSON à partir de sources externes tout en empêchant des instanciations de type potentiellement nocives. Cette approche proactive réduit considérablement le risque d'exploitation.

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