ทำไม XML ประเภทจึงปลอดภัย


30

เหตุใดพวกเขาจึงกล่าวว่า XML มีความปลอดภัยของประเภทและมันแสดงใน XML ได้อย่างไร?

มันแตกต่างจาก JSON อย่างไร (เช่นที่ฉันเข้าใจ) ซึ่งไม่ปลอดภัยประเภท?

คำตอบ:


36

เนื่องจากข้อกำหนดXML Schema (XSD)

ด้วย XML คุณสามารถมีไฟล์เพิ่มเติมซึ่งอธิบายสคีมาได้ มันบ่งชี้เช่นว่าองค์ประกอบ/a/bเป็นอาร์เรย์และมีตั้งแต่ 1 ถึง 10 องค์ประกอบหรือว่าองค์ประกอบ/a/cเป็นจำนวนเต็ม คุณสามารถค้นหาตัวอย่างของ XSD ที่นี่

การตรวจสอบไฟล์ XML ที่กำหนดผ่าน XSD จะได้รับการสนับสนุนจากหลายภาษา ตัวอย่างเช่นแอปพลิเคชัน. NET อาจร้องขอไฟล์ XML จากแหล่งที่ไม่น่าเชื่อถือและตรวจสอบว่าตรงกับ XSD ; จากนั้นสามารถบันทึกลงในฐานข้อมูล Microsoft SQL Server ซึ่งจะสามารถมี XSDและทำการตรวจสอบอีกครั้ง (เพื่อให้แน่ใจว่าไคลเอนต์ใด ๆที่มีการเข้าถึงฐานข้อมูลเป็นไปตามมาตรฐาน)

XSD ไม่ใช่ภาษาเดียว

  • หากคุณทำการพัฒนาเว็บไซต์เสร็จคุณจะได้ยินเกี่ยวกับDocument Type Definition (DTD) ซึ่งเป็นภาษามาร์กอัปซึ่งกำหนดโครงสร้างของ XML และใช้เป็นพิเศษในการตรวจสอบความถูกต้องของเนื้อหาที่เกี่ยวข้องกับ HTML แม้ว่ามันจะไม่สามารถทำทุกสิ่งที่ XSD ทำได้เช่นให้แน่ใจว่าองค์ประกอบหรือแอตทริบิวต์มีตัวเลขจำนวนเต็ม แต่ก็ยังสามารถทำการตรวจสอบโครงสร้างจำนวนมากได้

  • RELAX NGมีข้อดีคือค่อนข้างง่ายเมื่อเทียบกับภาษาอื่นและสามารถเขียนในรูปแบบที่กะทัดรัดกว่า XML

  • Schematronเป็นอีกหนึ่ง“ ภาษาการตรวจสอบตามกฎสำหรับการยืนยันเกี่ยวกับการมีหรือไม่มีรูปแบบในต้นไม้ XML” ( Wikipedia ) และนำเสนอวิธีการที่แตกต่างกันเล็กน้อยขึ้นอยู่กับการยืนยัน XPath

ความคิดริเริ่มที่คล้ายกันสำหรับ JSON นั้นไม่ได้รับความนิยมมากนัก (โดยเฉพาะอย่างยิ่งผมเชื่อว่าในโลกธุรกิจของ บริษัท ที่มี Microsoft เป็นศูนย์กลาง) หนึ่งในเหตุผลคือ JSON นั้นมีไว้สำหรับสถานการณ์ที่โครงสร้างข้อมูลค่อนข้างพื้นฐาน (เช่นสามารถแสดงเป็นแผนผังโดยไม่จำเป็นต้องมีแอททริบิวต์) และไม่จำเป็นต้องได้รับการตรวจสอบ ตัวอย่างที่ยอดเยี่ยมคือ REST API ที่ใช้โดยภาษาที่พิมพ์แบบไดนามิก:

  • ลูกค้านั้นใช้งานง่ายและรวดเร็ว
  • API เชื่อถือได้ว่าจะไม่เปลี่ยนแปลง
  • ลูกค้าสามารถจัดการกับใบไม้เฉพาะที่จำเป็นต้องมีการตรวจสอบความถูกต้อง (เช่นการตรวจสอบว่า/something/percentageเป็นจำนวนจริงและอยู่ในช่วง 0..100)

20

XML สามารถพิมพ์ได้อย่างปลอดภัยเนื่องจากเป็นไปได้ด้วย XSD schemas เพื่อประกาศชนิดข้อมูลขององค์ประกอบ เอกสารที่ผ่านการตรวจสอบกับ XSD schema นั้นรับรองว่าสอดคล้องกับประเภทที่คาดหวัง แต่รูปแบบ XML ไม่จำเป็นต้องมีสคีมาดังนั้นเอกสารจะไม่ปลอดภัยโดยอัตโนมัติเพียงแค่เป็น XML

ที่จริงแล้วมีภาษาสคีมาสำหรับ JSONด้วยเช่นกันดังนั้น safe type JSON จึงเป็นไปได้ แต่ไม่ค่อยมีใครใช้ดังนั้นโดยทั่วไป JSON จะไม่ปลอดภัย


2
คำตอบของคุณจะดีขึ้นด้วยชื่อหรือลิงก์สำหรับ JSON ที่เทียบเท่ากับ XSD
DougM

1
BTW: XML Schema นั้นไม่ได้เป็นเพียงคำจำกัดความของภาษาสคีมาเท่านั้นสำหรับ XML นอกจากนี้ยังมี Schematron, RelaxNG และแน่นอน SGML DTD ของ ol ดี
Jörg W Mittag

โปรดทราบว่าแม้จะมีสคีมา XML ก็อาจไม่ปลอดภัยสำหรับพิมพ์ หนึ่งอาจระบุองค์ประกอบที่จะมีเนื้อหาประเภท "ใด ๆ " ในขณะที่บางคนอาจโต้แย้งว่าเป็นรูปแบบของความปลอดภัยประเภท (ฉันไม่สนใจมีอะไรที่ถูกต้อง) ในเวลาเดียวกันไม่สามารถตรวจสอบได้: มันเป็นประเภท "ตัวแปร"

3

ในวิทยาการคอมพิวเตอร์ความปลอดภัยของประเภทคือขอบเขตที่ภาษาการเขียนโปรแกรมท้อหรือป้องกันข้อผิดพลาดประเภท

ความปลอดภัยของประเภทไม่ใช่คุณลักษณะที่แน่นอน มันไม่ใช่บูลีน ภาษา (และ XML และ JSON เป็นภาษา) อนุญาตและป้องกันข้อผิดพลาดและข้อผิดพลาดประเภทต่างๆ ตัวอย่างเช่นคุณสามารถตั้งชื่อองค์ประกอบผิด แต่คุณไม่สามารถข้ามองค์ประกอบวากยสัมพันธ์ที่จำเป็นเช่นแท็กปิดและวงเล็บปีกกา

Plain XML และ JSON นั้นค่อนข้างปลอดภัยเท่ากัน (หรือไม่ปลอดภัย) สตริง XML / JSON ที่ถูกต้องมีโครงสร้างไวยากรณ์และความหมายบางอย่าง แต่นี่แทบจะไม่เพียงพอสำหรับแอปพลิเคชันที่จะทำงานกับมัน การประยุกต์ใช้งานทำไม่เพียงใดโครงสร้าง แต่เฉพาะอย่างใดอย่างหนึ่ง

XML ส่องด้วย XML Schema Definition (XSD) ซึ่งเป็นวิธีที่ยืดหยุ่นและมีประสิทธิภาพในการตรวจสอบความถูกต้องของเอกสาร XML ที่กำหนดกับสคีมา ทำให้มีความปลอดภัยจำนวนมากภายใต้คำจำกัดความที่ระบุไว้ด้านบน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.