XML türü neden güvenlidir?


30

Neden XML'in tür güvenliği sağladığını ve XML'in kendisinde nasıl ifade edildiğini söylüyorlar?

JSON'dan (örneğin) hangisinin (benim anladığım gibi) güvenli olmadığı ne kadar farklı?

Yanıtlar:


36

Yüzünden XML şema tanımı (XSD).

XML ile şemayı tanımlayan ek bir dosyaya sahip olabilirsiniz. Örneğin, elemanın /a/bbir dizi olduğunu ve 1 ila 10 eleman içerdiğini veya elemanın /a/cbir tamsayı olduğunu belirtir . Burada bir XSD örneği bulabilirsiniz .

Belirli bir XML dosyasının bir XSD aracılığıyla doğrulanması birçok dil tarafından desteklenir . Örneğin, bir .NET uygulaması güvenilmeyen bir kaynaktan bir XML dosyası isteyebilir ve XSD ile eşleştiğini kontrol edebilir ; sonra, sırayla bir XSD içerebilen bir Microsoft SQL Server veritabanına kaydedebilir ve kontrolü tekrar yapabilir ( veritabanına erişimi olan herhangi bir müşterinin uymasını sağlamak için).

XSD tek dil değil.

  • Web geliştirme yaptıysanız , XML'in yapısını tanımlayan ve özellikle HTML ile ilgili içeriğin doğrulanmasında kullanılan bir biçimlendirme dili olan Belge Türü Tanımı (DTD) hakkında bir şey duymuşsunuzdur . XSD'nin yapabileceği her şeyi yapamıyor olsa da, bir öğenin veya bir özniteliğin bir tamsayı numarası içermesini sağlamak gibi, yine de bir sürü yapı denetimi gerçekleştirebilir.

  • RELAX NG , diğer dillere göre nispeten basit olma avantajına sahiptir ve XML'den daha kompakt bir biçimde yazılabilir.

  • Schematron başka bir “XML ağaçlarındaki kalıpların varlığı ya da yokluğu hakkında iddialarda bulunmak için kurala dayalı bir doğrulama dilidir” ( Wikipedia ) ve XPath iddialarına dayanarak biraz farklı bir yaklaşım sunuyor.

JSON için benzer girişimler o kadar popüler değildir (özellikle Microsoft merkezli kurumsal dünyada inanıyorum). Sebeplerden biri, JSON'un veri yapısının oldukça basit olduğu (örneğin, niteliklere ihtiyaç duymadan bir ağaç olarak ifade edilebilir) olduğu durumlar için tasarlandığı ve mutlaka onaylanması gerekmediğidir. Mükemmel bir örnek, dinamik olarak yazılmış bir dil tarafından kullanılan bir REST API'sidir:

  • müşteri uygulaması çok kolay ve hızlı
  • API'nin değişmemesine güvenilir,
  • Müşteri, doğrulamanın gerekli olduğu belirli yapraklar ile kolayca ilgilenebilir (örneğin /something/percentage, gerçek bir sayı olup, 0,0000 aralığında olup olmadığını kontrol edin ).

20

XML , güvenli olabilir, çünkü XSD şemaları ile veri tipi elemanlarını bildirmek mümkün. Bir XSD şemasına karşı onaylanmış bir dokümanın, beklenen tiplere uyması garanti edilir. Ancak bir şemaya sahip olmak için bir XML formatı gerekmez, bu nedenle bir doküman sadece XML olarak otomatik olarak güvenli değildir.

Orada aslında var JSON için bir şema dili kadar güvenli JSON mümkündür yazın da. Ancak nadiren kullanılır, bu nedenle tipik olarak JSON güvenli değildir.


2
Cevabınız, JSON için XSD'ye eşdeğer bir isim veya bağlantı ile daha iyi olacaktır.
DougM

1
BTW: XML Şeması, XML için yalnızca şema tanımlama dili değildir. Ayrıca Schematron, RelaxNG ve tabii ki SGML DTD'si de var.
Jörg W Mittag

Ayrıca, bir şema ile bile, XML'in güvenli olmayabileceğini unutmayın. Biri, "herhangi bir" içerik türüne sahip bir öğe belirtebilir. Bunun bir tür güvenlik biçimi olduğu iddia edilebilir (umrumda değil, hiçbir şey geçerli değil), aynı zamanda doğrulama yapılamaz: aslında bir "değişken" türdür.

3

Bilgisayar bilimlerinde tip güvenliği , bir programlama dilinin tip hatalarını engelleme veya önleme derecesidir.

Tip güvenliği mutlak bir özellik değildir. Boole değil. Diller (ve XML ve JSON olan diller) izin ve hata ya da yanlışların farklı türde engeller. Örneğin, elemanları yanlış adlandırabilirsiniz. Ancak, kapanış etiketleri ve ayraçlar gibi gerekli sözdizimsel öğeleri atlayamazsınız.

Düz XML ve JSON hemen hemen aynı derecede güvenlidir (veya güvenli değil). Geçerli bir XML / JSON dizgisi belirli bir sözdizimsel ve anlamsal yapıya sahiptir, ancak bir uygulamanın onunla çalışması için bu neredeyse hiçbir zaman yeterli değildir. Uygulamalar sadece bir yapı değil, belirli bir yapıdır.

XML, verilen bir XML belgesini bir şemaya göre doğrulamanın esnek ve güçlü bir yolu olan XML Şema Tanımı (XSD) ile parlar. Bu yukarıda verilen tanım gereği çok fazla emniyet sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.