Maison >
développement back-end >
C++ >
Dans quelle mesure votre désérialisation JSON est-elle sécurisée avec TypeNameHandling de Json.Net ?
Dans quelle mesure votre désérialisation JSON est-elle sécurisée avec TypeNameHandling de Json.Net ?
Patricia Arquette
Libérer: 2025-01-07 14:23:42
original
623 Les gens l'ont consulté
Exposition JSON externe : comprendre les risques liés à la gestion des noms de types avec Json.Net
La désérialisation JSON avec gestion automatique des types peut constituer des menaces de sécurité. Cet article vise à clarifier les vulnérabilités potentielles lors de l'utilisation de TypeNameHandling avec des paramètres définis sur Auto dans Json.Net.
Comprendre TypeNameHandling dans Json.Net
TypeNameHandling contrôle la façon dont JSON. Net désérialise les types avec les propriétés « $type », qui spécifient le nom complet du type à instancier. Lorsqu'il est défini sur Auto, Json.Net tente de résoudre le type spécifié et de construire une instance.
Dangers potentiels
Sans objet immédiat ou membres dynamiques dans votre modèle de données, vous pouvez assumer une protection contre les attaques de désérialisation. Cependant, certains scénarios peuvent encore présenter des risques :
Collections non typées : Désérialiser des collections non typées comme ArrayList ou List
CollectionBase : Les types héritant de CollectionBase permettent la validation des éléments à l'exécution, créant une faille potentielle pour la construction de gadgets d'attaque.
Types de base partagés : Les valeurs polymorphes avec des types de base ou des interfaces partagées par des gadgets d'attaque sont susceptibles d'être désérialisées. attaques.
Types ISerial cause : Les types implémentant ISerialisable peuvent désérialiser les membres non typés, y compris le dictionnaire Exception.Data.
Sérialisation conditionnelle : Membres marqués comme les méthodes non sérialisées via ShouldSerialize peuvent toujours être désérialisées si elles sont présentes dans JSON entrée.
Mesures d'atténuation
Pour améliorer la sécurité, considérez les éléments suivants :
Classeur de sérialisation personnalisé : Implémentez un SerializationBinder personnalisé pour valider les types attendus et empêcher la désérialisation des types inattendus. types.
TypeNameHandling.None : Pensez à définir TypeNameHandling sur Aucun, ce qui désactive efficacement la résolution de type pendant la désérialisation.
Alerte à la saisie inattendue/cachée : Restez vigilant quant aux membres non typés ou aux comportements de sérialisation cachés dans vos données model.
Désactiver le contrat de sérialisation par défaut : Évitez de définir DefaultContractResolver.IgnoreSerializingInterface ou DefaultContractResolver.IgnoreSerializingAttribute sur false.
Conclusion
Bien que certains mécanismes de Json.Net aident à atténuer les vulnérabilités, il est crucial d'examiner attentivement les risques potentiels posés par TypeNameHandling dans la désérialisation JSON externe. En suivant les précautions recommandées, telles que la mise en œuvre d'un SerializationBinder personnalisé et la vérification du typage de votre modèle de données, vous pouvez augmenter la sécurité de votre application tout en utilisant les fonctionnalités de Json.Net.
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!
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