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>
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>
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:
IBindingSerializer
. 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. 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!