מדיניות מאותו מקור

Mariko Kosaka

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

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

מדיניות המקור הזהה מונעת מצב כזה על ידי חסימת גישת הקריאה של שנטענים ממקור אחר. "אבל רגע," אומרים, "אני טוען תמונות וסקריפטים ממקורות אחרים כל הזמן." דפדפנים מאפשרים לכמה תגים להטמיע משאבים ממקור אחר. המדיניות הזו מבוססת בעיקר על עלול לחשוף את האתר שלך לנקודות חולשה, כמו חטיפת קליקים (clickjacking) באמצעות iframes. אפשר להגביל קריאה ממקורות שונים של תגים אלה באמצעות רכיב אבטחת תוכן מדיניות.

מה נחשב למקור זהה?

מקור מוגדר על ידי הסכימה (לדוגמה, ידוע גם כפרוטוקול) HTTP או HTTPS), יציאה (אם צוין) ומארח. כאשר כל השלושה זהים לשתי כתובות URL, הן נחשבות לאותו מקור. לדוגמה, http://www.example.com/foo הוא אותו המקור כמו http://www.example.com/bar אבל לא https://www.example.com/bar כי הסכימה שונה.

מה מותר ומה אסור?

באופן כללי, מותר להטמיע משאב ממקורות שונים, בזמן קריאת משאב ממקורות שונים חסום.

מסגרות iframe בדרך כלל מותרת הטמעה ממקורות שונים (בהתאם להוראה X-Frame-Options), אבל קריאה ממקורות שונים (כמו שימוש ב-JavaScript כדי לגשת למסמך ב-iframe) לא מותרת.
CSS אפשר להטמיע CSS ממקורות שונים באמצעות רכיב <link> או @import בקובץ CSS. יכול להיות שצריך להשתמש בכותרת Content-Type הנכונה.
טפסים אפשר להשתמש בכתובות URL ממקורות שונים בתור ערך המאפיין action של רכיבי טופס. אפליקציית אינטרנט יכולה לכתוב נתוני טופס ליעד ממקורות שונים.
תמונות מותר להטמיע תמונות ממקורות שונים. עם זאת, הגישה של נתוני תמונה ממקורות שונים (כמו אחזור נתונים בינאריים מתמונה ממקורות שונים באמצעות JavaScript) תיחסם.
מולטימדיה אפשר להטמיע וידאו ואודיו ממקורות שונים באמצעות רכיבי <video> ו-<audio>.
סקריפט ניתן להטמיע סקריפטים ממקורות שונים. עם זאת, ייתכן שהגישה לממשקי API מסוימים (כמו בקשות אחזור ממקורות שונים) תיחסם.

TODO: DevSite – בדיקת חשיבה ובדיקה

איך מונעים חטיפת קליקים (clickjacking)

חטיפת קליקים (clickjacking)
איור: מנגנון חטיפת קליקים (clickjacking) מוצג ב-3 שכבות נפרדות (אתר הבסיס, אתר iframe, לחצן שקוף).

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

כדי למנוע מאתרים אחרים להטמיע את האתר שלכם ב-iframe, יש להוסיף תוכן מדיניות האבטחה של frame-ancestors הוראה לכותרות ה-HTTP.

לחלופין, אפשר להוסיף את X-Frame-Options לכותרות ה-HTTP MDN לרשימת האפשרויות.

סיכום

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