HyperText Markup Language, או HTML, היא השפה העיקרית עבור דפי אינטרנט באינטרנט. הוא כולל תמיכה במספר שפות אחרות המוסיפות פונקציונליות וסגנון נוסף כמו JavaScript ו-CSS. כל השפות הללו מבוססות על טקסט עם כמה תווים משמעותיים המשמשים להפרדת מחרוזות מילוליות שיש להדפיס לדפדפן וקוד שיש לפרש ולהפעיל.
לעיצוב הזה יש כמה בעיות, אבל אלה הופכות ברורות כאשר אתה רוצה להדפיס את אחת התווים המשמעותיים לדפדפן. התווים לדוגמה הטובים ביותר לשימוש הם הסמלים "פחות מ" ו"גדול מ". בהתאמה סמלים אלה משמשים לפתיחה וסגירה של מקטעי קוד ב-HTML. השיטה הנכונה להדפיס תווים אלה על המסך בצורה בטוחה היא להשתמש בישויות HTML.
ישויות HTML ואבטחה
הודות למשמעות מיוחדת של התווים הללו, עליך להקפיד באמת להקפיד להחליף אותם בגרסת ישות HTML אם אתה רוצה שיודפסו לדפדפן. לרוע המזל, מפתחי אתרים רבים שוכחים שמשתמשים יכולים להגיש מידע לאתרים רבים. אם קלט המשתמש הזה כולל תווים משמעותיים והם לא מוחלפים בישויות HTML, בתהליך שנקרא חיטוי, אזי לאתר יש פגיעות של סקריפטים חוצי אתרים (XSS).
טיפ: אל תנסה לשלוח תווים מיוחדים לאתרי אינטרנט בניסיון למצוא פרצות XSS. פעולה זו מהווה פריצה טכנית ומהווה עבירה פלילית אלא אם יש לך אישור מבעל האתר.
איך ישויות HTML עובדות (ולפעמים לא)
ישויות HTML עובדות כי הדפדפן יודע להציג אותו כתו המיוחד הרלוונטי ולא להתייחס אליו כאל תו מיוחד. כל ישויות ה-HTML מתחילות באמפרסנד "&" ומסתיימות בנקודה פסיק ";". רוב התווים מזוהים על ידי מספר ישות, אם כי לחלק מהתווים המיוחדים יש גם שם קיצור. לדוגמה, ל-"&", "" יש את מספרי הישות "&", "" וכן את שמות הישויות "&", "" בהתאמה. הדפדפן יודע שהמחרוזות הללו אומרות שהוא צריך להציג את התווים הרלוונטיים.
טיפ: ניתן למצוא רשימה מלאה של שמות ישויות אופי פה, למרות שהתמיכה בשמות ישויות משתנה לפי הדפדפן.
ברוב המקרים, משתמשים צריכים לראות רק את התווים שיישויות HTML מייצגות. עם זאת, ניתן לראות תווים מקודדים, בדרך כלל אמפרסנד "&", באמצעות תהליך שנקרא "קידוד כפול". זה קורה כאשר תו האמפרסנד מופיע בגרסה המקודדת שלו. קידוד כפול מתרחש בדרך כלל כאשר הקלט מקודד נכון, כפי שהוא נשלח, עם זאת, כאשר הוא מופק הוא עובר חיטוי שוב. זה גורם לכך שהאמפרסנד בתחילת ה-"&" מקודד בפעם השנייה ויופיע כ-"&", לאחר מכן הדפדפן מפרש נכון את זה כמחרוזת שיש להדפיס כ-"&" לאחר שפיענחה את ישות ה-HTML והתעלמה מהחלקי יֵשׁוּת.