מה עושה X-Content-Type-Options?

כותרות אבטחה הן תת-קבוצה של כותרות תגובת HTTP שניתן להגדיר על ידי שרת אינטרנט שכל אחד מיישם בקרת אבטחה בדפדפנים. כותרות HTTP הן סוג של מטא נתונים הנשלחים עם בקשות ותגובות אינטרנט. כותרת האבטחה "X-Content-Type-Options" מונעת מדפדפנים לבצע רחרוח MIME.

הערה: כותרות HTTP אינן בלעדיות ל-HTTP ומשמשות גם ב-HTTPS.

מה זה רחרוח MIME?

כאשר נתונים כלשהם נשלחים דרך האינטרנט, אחד מחלקי המטא נתונים הכלולים הוא סוג MIME. Multipurpose Internet Mail Extensions, או סוגי MIME הם תקן המשמש להגדרת סוג הנתונים שהקובץ מכיל, המציין כיצד יש לטפל בקובץ. בדרך כלל, סוג MIME מורכב מסוג ומתת-סוג עם פרמטר וערך אופציונליים. לדוגמה, לקובץ טקסט UTF-8 יהיה סוג MIME "text/plain; charset=UTF-8". בדוגמה זו, הסוג הוא "טקסט", תת הסוג הוא "רגיל", הפרמטר הוא "charset", והערך הוא "UTF-8".

כדי למנוע תיוג שגוי וטיפול שגוי בקבצים, שרתי אינטרנט מבצעים בדרך כלל רחרוח MIME. זהו תהליך שבו מתעלמים מסוג ה-MIME שצוין במפורש, ובמקום זאת מנתחים את תחילת הקובץ. רוב סוגי הקבצים כוללים רצפי כותרות המציינים באיזה סוג קובץ מדובר. רוב הזמן, סוגי MIME נכונים, והרחה של הקובץ לא משנה. אם יש הבדל, שרתי אינטרנט ישתמשו בסוג הקובץ המריח כדי לקבוע כיצד לטפל בקובץ ולא בסוג MIME המוצהר.

הבעיה מתרחשת אם תוקף מצליח להעלות קובץ כמו תמונת PNG, אבל הקובץ הוא באמת משהו אחר כמו קוד JavaScript. עבור סוגי קבצים דומים, כגון שני סוגי טקסט, ייתכן שהדבר לא יגרום ליותר מדי בעיה. עם זאת, זה הופך לבעיה רצינית, אם ניתן לבצע במקום קובץ תמים לחלוטין.

מה עושה X-Content-Type-Options?

לכותרת X-Content-Type-Options יש רק ערך אפשרי אחד "X-Content-Type-Options: nosniff". הפעלתו מודיעה לדפדפן המשתמש שאסור לו לבצע רחרוח מסוג MIME ובמקום זאת להסתמך על הערך המוצהר במפורש. ללא הגדרה זו, אם קובץ JavaScript זדוני היה מוסווה לתמונה כגון PNG, קובץ ה-JavaScript יבוצע. כאשר X-Content-Type-Options מופעלת, הקובץ יטופל כתמונה שלא מצליחה להיטען מכיוון שהקובץ אינו פורמט תמונה חוקי.

X-Content-Type-Options אינו הכרחי במיוחד באתר שמשתמש לחלוטין במשאבי צד ראשון, מכיוון שאין סיכוי שקובץ זדוני יוגש בטעות. אם אתר אינטרנט משתמש בתוכן של צד שלישי כגון משאבים חיצוניים, או משאבים שנשלחו על ידי המשתמש, אז X-Content-Type-Options מספק הגנה מפני סוג זה של התקפה.