הגדרות XML (.xml)

W3C תקן

שפת הסימון הניתנת להרחבה (XML) היא שפת סימון רב-תכליתית המגדירה סט של חוקים לקידוד מסמכים בפורמט הקריא גם לבני אדם וגם למכונות.

כיווץ XML אונליין

פרטי - הקבצים לעולם אינם עוזבים את המכשיר שלך

בדיקה ומטא-נתונים

מערכות הפעלה ומנתחי קבצים מזהים קבצי XML על ידי בדיקת רצף הבייטים הבינארי הראשוני:

בחר או גרור קבצים לכאן

פרטי - הקבצים לעולם אינם עוזבים את המכשיר שלך

או הדבק Ctrl+V
הבטחת פרטיות ללא העברת נתונים ברשת: 0 בייט הועלו לשרתים חיצוניים. כל העיבוד התבצע באופן מקומי בארגז החול של הדפדפן שלך.

חתימת כותרת ברמת הבייט (Magic Bytes)

מערכות הפעלה ומנתחי קבצים מזהים קבצי XML על ידי בדיקת רצף הבייטים הבינארי הראשוני:

חתימת HEX (היסט 0):

3C 3F 78 6D

ייצוג ASCII: <?xm

תקינה: W3C Recommendation (XML 1.0 Fifth Edition)

מפרט טכני

מבנה המכולהשפת סימון טקסטואלית היררכית עם תגיות סמנטיות ומאפיינים מותאמים אישית
דחיסהדחיסת Gzip ו-Deflate יכולה להקטין את הגודל ב-85%-92% כשיש תגיות סגירה מפורטות
סדר בתים (Endianness)זרם תווים UTF-8 / UTF-16 המוגדר על ידי מאפיין הקידוד בהצהרת ה-XML
מרחבי צבעלא ישים
ערוצים ומבנהאלמנטים (<tag>), מאפיינים (attr="val"), בלוקי CDATA, הוראות עיבוד
ממדים מרבייםמבנה עץ היררכי ללא הגבלת גודל
שקיפותלא ישים
הזרמה ופרוגרסיביותמנתחי SAX (Simple API for XML) ו-StAX מאפשרים קריאת זרמים חסכונית בזיכרון

מטריצת השוואה טכנית: XML מול מתחרים

תכונה טכניתXML (נוכחי)JSONYAMLProtocol Buffers
מלל (Verbosity)גבוה (תגיות סגירה ותחביר מאפיינים)נמוך (פורמט מפתח-ערך קומפקטי)נמוך (מבוסס הזחות)נמוך במיוחד (סריאליזציה בינארית)
אימות סכמהתקני XSD ו-DTD בוגרים עם אכיפת מהדרJSON Schema (אופציונלי)JSON Schema / סכמות Yamlהגדרות סכמה נוקשות מסוג .proto
מרחבי שמותתמיכה במרחבי שמות מובנים ב-XML (xmlns)אין מנגנון מרחב שמות מובנהאין מנגנון מרחב שמות מובנההצהרות חבילה
טרנספורמציותצינורות עיבוד דקלרטיביים מסוג XSLTקוד מותאם אישית / סקריפטים של jqקוד מותאם אישיתקוד מותאם אישית

מצבי השחתה נפוצים ומדריך שחזור הקסדצימלי (Hex)

שגיאת ניתוח XML: תג לא תואם או ישות לא מוגדרת.

גורם שורש: תווים שמורים שלא עברו escape (כמו '&', '<', או '>') או חוסר התאמה באותיות רישיות וקטנות בין תגיות פתיחה לסגירה.

שחזור: החלף '&' ב-'&amp;', '<' ב-'&lt;', '>' ב-'&gt;', או עטוף טקסט שרירותי בתוך בלוקים מסוג '<![CDATA[ ... ]]>'.

ניתוח אבטחה ווקטורי תקיפה נגד מנתחי פורמטים (parsers)

מנתחי XML היו לאורך ההיסטוריה בין הרכיבים המותקפים ביותר במחשוב ארגוני, בשל יכולות ה-DTD והרחבת הישויות שלהם.

ווקטורי תקיפה ידועים

  • ישות חיצונית ב-XML (XXE): ‏DOCTYPE זדוני המפנה לקובצי שרת מקומיים ('file:///etc/passwd') או לנקודות קצה פנימיות ברשת.
  • מתקפת Billion Laughs (פצצת XML): הצהרות ישויות מקוננות המתרחבות באופן מעריכי בזיכרון כדי לגרום למניעת שירות.
  • הזרקת XPath: קלטי משתמש שלא עברו ניקוי ומאפשרים שאילתות בלתי מורשות על מסדי נתונים של XML.

שיטות מומלצות להגנה: נטרל תמיד פתרון DTD חיצוני ועיבוד ישויות חיצוניות (הגדר את המאפיין 'disallow-doctype-decl' כ-true) במנתחי XML.

היסטוריה ואבני דרך

2008ארגון W3C מפרסם את XML 1.0 מהדורה חמישית, המקבעת תקן לתמיכה בתווים בינלאומיים מודרניים.
2000ארגון W3C מפרסם את XML Schema 1.0 (XSD) ואת DOM Level 2, המייסדים טיפוס נתונים מובנה וארכיטקטורות אירועים.
1998ארגון W3C מפרסם את ההמלצה XML 1.0 כתת-קבוצה פשוטה וידידותית לרשת של SGML.

יתרונות מרכזיים

  • אימות סכמה קפדני באמצעות XSD (XML Schema Definition) או DTD מבטיח שלמות נתונים נוקשה.
  • מרחבי שמות (xmlns) מונעים התנגשויות בשמות אלמנטים במסמכים מורכבים מרובי מקורות.
  • כלי שאילתה וטרנספורמציה עוצמתיים (XPath, XSLT, XQuery).

מגבלות טכניות וחסרונות

  • ארוכה ומפורטת מאוד: תגיות סגירה חוזרות על שמות אלמנטים, מה שיוצר קבצים גדולים וצריכת רוחב פס גבוהה.
  • ניתוח DOM מייצר עצי אובייקטים גדולים וזוללי זיכרון.
  • פגיע לפגיעויות אבטחה מסוג ישויות חיצוניות ב-XML (XXE) והרחבת ישויות.

עובדות טכניות מעניינות

  • XML הוא תת-קבוצה פשוטה של SGML (Standard Generalized Markup Language), שתוכננה לפעול בצורה חלקה ברשת האינטרנט העולמית.
  • מסמכי אופיס מודרניים (.docx, .xlsx), תמונות וקטוריות (.svg), וערוצי RSS הם כולם ניבים מיוחדים של XML.
  • מתקפת מניעת השירות הקלאסית 'Billion Laughs' משתמשת בקילו-בייט אחד בלבד של ישויות XML מקוננות (lol1 המתייחס לעשרה lol0s, עד ל-lol9), שמתרחבות באופן מעריכי ל-3 ג'יגה-בייט של זיכרון בעת הניתוח.

שאלות טכניות נפוצות

מה ההבדל בין XML בנוי היטב לבין XML תקף?

XML "בנוי היטב" מציית לכללי התחביר הבסיסיים (תגיות תואמות, מרכאות סביב מאפיינים ואלמנט שורש יחיד). XML "תקף" הוא בנוי היטב וגם תואם בקפדנות לסכימה חיצונית (XSD או DTD).

מדוע JSON החליף את XML עבור רוב ממשקי ה-API ברשת?

JSON ממפה ישירות למבני נתונים מקוריים ב-JavaScript ובשפות תכנות אחרות (מפות גיבוב ומערכים), ודורש פחות קוד תשתית (boilerplate), מאפשר פענוח מהיר יותר ומייצר מטעני נתונים קטנים יותר ברשת.

מהי פגיעות ישות חיצונית ב-XML (XXE)?

פגיעות XXE מתרחשת כאשר מנתחי XML מעבדים מסמך לא מהימן עם הגדרת סוג מסמך חיצוני (DTD) מופעלת. תוקפים יכולים להגדיר ישויות המצביעות על קבצי שרת מקומיים (כגון קובצי הגדרות מערכת) או כתובות URL פנימיות ברשת, מה שגורם לשרת לקרוא ולחשוף נתונים סודיים.