Pourquoi le type XML est-il sûr?

30

Pourquoi disent-ils que XML offre une sécurité de type et comment est-il exprimé dans le XML lui-même?

En quoi est-il différent de JSON (par exemple) qui (si je comprends bien) n'est pas de type sécurisé?

user3339411
la source

Réponses:

36

En raison de la définition de schéma XML (XSD).

Avec XML, vous pouvez avoir un fichier supplémentaire qui décrit le schéma. Il indique, par exemple, que l'élément /a/best un tableau et contient de 1 à 10 éléments, ou que l'élément /a/cest un entier. Vous pouvez trouver un exemple de XSD ici .

La validation d'un fichier XML donné via un XSD est prise en charge par de nombreuses langues . Par exemple, une application .NET peut demander un fichier XML à une source non fiable et vérifier qu'il correspond au XSD ; ensuite, il peut l'enregistrer dans une base de données Microsoft SQL Server, qui peut à son tour contenir un XSD et refaire la vérification (pour s'assurer que tout client ayant accès à la base de données se conforme).

XSD n'est pas la seule langue.

  • Si vous avez fait du développement Web, vous avez certainement entendu parler de la définition de type de document (DTD), un langage de balisage qui définit la structure de XML et est utilisé en particulier pour la validation du contenu HTML. Bien qu'il ne puisse pas faire tout ce que XSD peut faire, comme s'assurer qu'un élément ou un attribut contient un nombre entier, il peut toujours effectuer un tas de vérifications de structure.

  • RELAX NG a l'avantage d'être relativement simple par rapport aux autres langues et peut être écrit sous une forme plus compacte que XML.

  • Schematron est un autre «langage de validation basé sur des règles pour faire des affirmations sur la présence ou l'absence de modèles dans les arbres XML» ( Wikipedia ) et présente une approche légèrement différente, basée sur les affirmations XPath.

Des initiatives similaires pour JSON ne sont pas si populaires (en particulier, je crois, dans le monde de l'entreprise centré sur Microsoft). L'une des raisons est que JSON est destiné aux situations où la structure des données est plutôt basique (c'est-à-dire peut être exprimée sous forme d'arbre, sans avoir besoin d'attributs, par exemple) et n'a pas nécessairement besoin d'être validée. Un excellent exemple est une API REST utilisée par un langage à typage dynamique:

  • le client est très simple et rapide à mettre en œuvre,
  • l'API est censée ne pas changer,
  • le client peut facilement traiter des feuilles spécifiques où la validation est nécessaire (par exemple, vérifier qu'il /something/percentages'agit d'un nombre réel et qu'il se situe dans une plage de 0 à 100).
Arseni Mourzenko
la source
20

XML peut être sécurisé de type, car il est possible avec les schémas XSD de déclarer le type de données des éléments. Un document validé par rapport à un schéma XSD est garanti conforme aux types attendus. Mais un format XML n'est pas nécessaire pour avoir un schéma, donc un document n'est pas automatiquement de type sécurisé simplement en étant XML.

Il existe également un langage de schéma pour JSON , donc le type JSON sécurisé est possible. Mais il est rarement utilisé, donc généralement JSON n'est pas sûr pour le type.

JacquesB
la source
2
Votre réponse serait meilleure avec un nom ou un lien pour l'équivalent JSON de XSD.
DougM
1
BTW: XML Schema n'est de loin pas le seul langage de définition de schéma pour XML. Il y a aussi Schematron, RelaxNG, et bien sûr le bon vieux DTML SGML.
Jörg W Mittag
Gardez également à l'esprit que même avec un schéma, XML peut ne pas être de type sécurisé. On peut spécifier qu'un élément doit avoir "n'importe quel" type de contenu. Alors que l'on pourrait affirmer qu'il s'agit d'une forme de sécurité de type (peu m'importe, tout est valable) en même temps aucune validation ne peut être effectuée: il s'agit essentiellement d'un type "variant".
3

En informatique, la sécurité de type est la mesure dans laquelle un langage de programmation décourage ou empêche les erreurs de type.

La sécurité des types n'est pas un attribut absolu. Ce n'est pas booléen. Les langages (et XML et JSON sont des langages) permettent et préviennent différents types d'erreurs et d'erreurs. Par exemple, vous pouvez nommer des éléments de manière incorrecte. Mais vous ne pouvez pas ignorer les éléments syntaxiques requis tels que la fermeture des balises et des accolades.

Le XML simple et le JSON sont à peu près également de type sûr (ou de type non sûr). Une chaîne XML / JSON valide a une certaine structure syntaxique et sémantique mais cela ne suffit presque jamais pour qu'une application fonctionne avec elle. Les applications ne sont pas seulement une structure mais une structure spécifique.

XML brille avec la définition de schéma XML (XSD) qui est un moyen flexible et puissant de valider un document XML donné par rapport à un schéma. Cela offre beaucoup de sécurité de type selon la définition donnée ci-dessus.

usr
la source