Maison > développement back-end > C++ > L'utilisation de `TynEnameHandling.all` dans Newtonsoft.json est-elle sûre pour désérialiser les données non fiables?

L'utilisation de `TynEnameHandling.all` dans Newtonsoft.json est-elle sûre pour désérialiser les données non fiables?

Patricia Arquette
Libérer: 2025-01-31 16:26:09
original
360 Les gens l'ont consulté

newtonsoft.json's TypeNameHandling.All: risques de sécurité lors de la désérialisation des données non fiables

La propriété TypeNameHandling dans newtonsoft.json dicte comment les objets polymorphes sont désérialisés. Le définir sur TypeNameHandling.All permet à newtonsoft.json d'instancier des types en fonction de la propriété $type dans le nouveau JSON. Cependant, cela présente des vulnérabilités de sécurité importantes lors de la gestion des données non fiables.

Is Using `TypeNameHandling.All` in Newtonsoft.Json Safe for Deserializing Untrusted Data?

Implications de sécurité

Les acteurs malveillants peuvent exploiter TypeNameHandling.All en injectant une propriété $type spécifiant un type nocif dans le JSON. Cela leur permet d'exécuter du code arbitraire ou d'effectuer des actions indésirables sur le système cible.

Considérons une classe apparemment inoffensive:

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

Une charge utile JSON malveillante pourrait ressembler à ceci:

<code class="language-json">{
  "$type": "System.Diagnostics.Process",
  "Make": "Attack",
  "Model": "DeleteC:\ImportantFiles"
}</code>
Copier après la connexion

Bien que les propriétés Make et Model soient bénignes, la propriété $type force la création d'un objet System.Diagnostics.Process, initiant potentiellement des processus nocifs sur le système. Cela contourne la vérification normale de type et ouvre la porte à diverses attaques.

atténuer le risque

pour empêcher de telles attaques, évitez d'utiliser TypeNameHandling.All lorsque la désérialisation de JSON à des sources externes et non fiables. Au lieu de cela, utilisez TypeNameHandling.None pour désactiver la manipulation du nom de type. Alternativement, implémentez une coutume SerializationBinder pour contrôler méticuleusement quels types sont autorisés pendant la désérialisation, des types de sécurité en plaques blanches. Cela fournit une approche plus granulaire et sécurisée pour manipuler la désérialisation polymorphe.

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