Perché il tipo XML è sicuro?


30

Perché dicono che l'XML fornisce la sicurezza dei tipi e come viene espresso nell'XML stesso?

In che modo differisce da JSON (ad esempio) che (come ho capito) non è sicuro?

Risposte:


36

A causa della definizione dello schema XML (XSD).

Con XML, puoi avere un file aggiuntivo che descrive lo schema. Indica, ad esempio, che l'elemento /a/bè un array e contiene da 1 a 10 elementi o che l'elemento /a/cè un numero intero. Puoi trovare un esempio di XSD qui .

La convalida di un determinato file XML tramite un XSD è supportata da molte lingue . Ad esempio, un'applicazione .NET può richiedere un file XML da un'origine non attendibile e verificare che corrisponda all'XSD ; quindi, può salvarlo in un database Microsoft SQL Server, che a sua volta può contenere un XSD ed eseguire nuovamente il controllo (per assicurarsi che qualsiasi client che abbia accesso al database sia conforme).

XSD non è l'unica lingua.

  • Se hai fatto lo sviluppo web, hai sicuramente sentito parlare di Document Type Definition (DTD), un linguaggio di markup che definisce la struttura di XML e viene utilizzato soprattutto nella convalida del contenuto correlato a HTML. Sebbene non possa fare tutto ciò che XSD può fare, ad esempio assicurare che un elemento o un attributo contenga un numero intero, può comunque eseguire una serie di controlli di struttura.

  • RELAX NG ha il vantaggio di essere relativamente semplice rispetto ad altre lingue e può essere scritto in una forma più compatta rispetto a XML.

  • Schematron è un altro "linguaggio di convalida basato su regole per fare asserzioni sulla presenza o l'assenza di schemi negli alberi XML" ( Wikipedia ) e presenta un approccio leggermente diverso, basato su asserzioni XPath.

Iniziative simili per JSON non sono così popolari (soprattutto, credo, nel mondo aziendale incentrato su Microsoft). Uno dei motivi è che JSON è destinato a situazioni in cui la struttura dei dati è piuttosto semplice (ovvero può essere espressa come un albero, senza la necessità di attributi, ad esempio) e non deve necessariamente essere convalidata. Un esempio eccellente è un'API REST utilizzata da un linguaggio tipizzato in modo dinamico:

  • il client è molto facile e veloce da implementare,
  • si ritiene che l'API non cambi,
  • il cliente può facilmente gestire fogli specifici in cui è necessaria la convalida (ad esempio verificare che /something/percentagesia un numero effettivo ed è compreso nell'intervallo 0..100).

20

L'XML può essere di tipo sicuro, poiché con gli schemi XSD è possibile dichiarare il tipo di dati degli elementi. Un documento convalidato rispetto a uno schema XSD è garantito conforme ai tipi previsti. Ma un formato XML non deve avere uno schema, quindi un documento non viene automaticamente digitato in modo sicuro solo essendo XML.

Esiste effettivamente un linguaggio di schema anche per JSON , quindi è possibile digitare JSON sicuro. Ma è usato raramente, quindi in genere JSON non è sicuro.


2
La tua risposta sarebbe migliore con un nome o un link per l'equivalente JSON di XSD.
DougM,

1
A proposito: XML Schema non è di gran lunga l'unico linguaggio di definizione dello schema per XML. C'è anche Schematron, RelaxNG e ovviamente il buon vecchio DTD SGML.
Jörg W Mittag,

Inoltre, tieni presente che anche con uno schema, XML potrebbe non essere sicuro per i tipi. Si può specificare un elemento per avere "qualsiasi" tipo di contenuto. Mentre si potrebbe sostenere che si tratta di una forma di sicurezza del tipo (non mi interessa, nulla è valido) allo stesso tempo non è possibile eseguire alcuna convalida: si tratta essenzialmente di un tipo "variante".

3

Nell'informatica, la sicurezza dei tipi è la misura in cui un linguaggio di programmazione scoraggia o previene errori di tipo.

La sicurezza del tipo non è un attributo assoluto. Non è booleano. Le lingue (e XML e JSON sono lingue) consentono e prevengono diversi tipi di errori. Ad esempio puoi sbagliare il nome degli elementi. Ma non puoi saltare gli elementi sintattici richiesti come la chiusura di tag e parentesi graffe.

Plain XML e JSON sono praticamente ugualmente sicuri (o non sicuri). Una stringa XML / JSON valida ha una certa struttura sintattica e semantica, ma questo non è quasi mai sufficiente affinché un'applicazione possa utilizzarla. Le applicazioni non hanno solo una struttura ma una specifica.

XML brilla con XML Schema Definition (XSD) che è un modo flessibile e potente per convalidare un determinato documento XML rispetto a uno schema. Ciò fornisce molta sicurezza di tipo secondo la definizione sopra riportata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.