Maison > développement back-end > C++ > TypeNameHandling.Auto de Json.Net définit-il un risque de sécurité pour la désérialisation JSON externe ?

TypeNameHandling.Auto de Json.Net définit-il un risque de sécurité pour la désérialisation JSON externe ?

Susan Sarandon
Libérer: 2025-01-07 14:27:42
original
160 Les gens l'ont consulté

Is Json.Net's TypeNameHandling.Auto Setting a Security Risk for External JSON Deserialization?

Le JSON externe est-il vulnérable en raison de la gestion automatique des noms de types Json.Net ?

Dans le domaine des applications Web, la gestion des requêtes JSON est une pratique courante . Cependant, des inquiétudes ont été soulevées concernant les menaces potentielles posées par la désérialisation automatique des types à l'aide de frameworks JSON comme Json.Net.

Comprendre le problème

Lorsqu'une charge utile JSON est désérialisée sans validation adéquate, en particulier lorsque des propriétés dynamiques ou typées objet sont présentes, il devient possible pour un attaquant de fournir une charge utile malveillante contenant une clé « $type ». Cette clé peut spécifier un gadget d'attaque qui, une fois désérialisé, peut exécuter du code arbitraire sur le système récepteur.

TypeNameHandling and Vulnerability

Json.Net fournit un paramètre TypeNameHandling qui détermine comment les charges utiles JSON contenant les clés "$type" sont handled :

  • Aucun : Désactive la désérialisation des clés "$type".
  • Auto : Résout automatiquement le type spécifié par le " $type".

Par défaut, ce paramètre est souvent laissé sur "Auto", ce qui augmente préoccupations concernant les vulnérabilités potentielles.

Approche sûre avec TypeNameHandling.Auto

Dans le scénario spécifique où le JSON entrant est uniquement désérialisé en un type spécifique (MyObject) et il n'y a pas objet ou des membres typés dynamiquement au sein de MyObject ou de ses sous-objets, il est peu probable qu'une vulnérabilité existe.

Cependant, il est important de noter que cela ne constitue pas une garantie de sécurité. Des types inattendus ou des collections contenant des éléments non typés pourraient toujours permettre la désérialisation d'un gadget d'attaque.

Atténuations et meilleures pratiques

Pour atténuer davantage le risque, considérez les meilleures pratiques suivantes pratiques :

  • Utilisez un SerializationBinder personnalisé pour valider les types entrants.
  • Limitez l'utilisation des types objet, dynamique et IDynamicMetaObjectProvider.
  • Faites preuve de prudence lors de la désérialisation de collections ou valeurs qui partagent un type de base avec des gadgets d'attaque potentiels.
  • Définir DefaultContractResolver.IgnoreSerializingInterface = true pour empêcher la désérialisation des types implémentant ISeriallessly.

Conclusion

L'utilisation du paramètre TypeNameHandling.Auto de Json.Net peut réduire le risque de vulnérabilité , il est essentiel de valider minutieusement les données JSON entrantes et de mettre en œuvre des mesures de protection supplémentaires pour atténuer les risques potentiels. menaces.

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