"Same-site" ו-"same-origin"

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

מקור
המבנה של מקור.

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

'Same-origin' ו-'cross-origin'

אתרים שיש בהם שילוב זהה של סכימה, שם מארח ויציאה נחשבים ל "אותו מקור". כל השאר נחשב כ-'cross-origin'.

מקור א' מקור ב' 'Same-origin' או 'cross-origin'?
https://www.example.com:443 https://www.evil.com:443 מקורות שונים: דומיינים שונים
https://example.com:443 מקורות שונים: תת-דומיינים שונים
https://login.example.com:443 מקורות שונים: תת-דומיינים שונים
http://www.example.com:443 מקורות שונים: סכמות שונות
https://www.example.com:80 מקורות שונים: יציאות שונות
https://www.example.com:443 אותו מקור: התאמה מדויקת
https://www.example.com אותו מקור: התאמות של מספר יציאה משתמע (443)

אתר

אתר (TLD+1)
החלקים בכתובת URL שמרכיבים אתר.

דומיינים ברמה עליונה (TLD), כמו .com ו-.org, רשומים במסד הנתונים של Root Zone. בדוגמה
הקודמת, "site" הוא שילוב של הסכימה, ה-TLD והחלק של הדומיין שלפניו (אנחנו קוראים לו TLD+1). לדוגמה, אם נותנים את כתובת ה-URL https://www.example.com:443/foo, הערך בשדה 'site' הוא https://example.com.

רשימת סיומות ציבוריות ו-eTLD

בדומיינים עם רכיבים כמו .co.jp או .github.io, השימוש רק ב-.jp או ב-.io לא ספציפי מספיק כדי לזהות את ה"אתר". אין דרך לקבוע באופן אלגוריתמי את רמת הדומיינים שניתן לרשום לדומיין ספציפי ברמה העליונה. כדי לעזור לכם בכך, רשימת הסיומות הציבוריות מגדירה רשימה של סיומות ציבוריות, שנקראות גם דומיינים ברמה עליונה בפועל (eTLD). רשימת הדומיינים ה-eTLD מופיעה בכתובת publicsuffix.org/list.

כדי לזהות את החלק ה "אתר" בדומיין שכולל eTLD, צריך ליישם את אותה שיטה כמו בדוגמה עם .com. אם ניקח לדוגמה את https://www.project.github.io:443/foo, הסכמה היא https, ה-eTLD הוא .github.io וה-eTLD+1 הוא project.github.io, לכן https://project.github.io נחשב ל "אתר" בכתובת ה-URL הזו.

אתר (eTLD+1)
החלקים של כתובת URL עם דומיין eTLD.

'same-site' ו-'cross-site'

אתרים עם אותה סכימה ואותו eTLD+1 נחשבים "אותו אתר". אתרים עם סכימה שונה או eTLD+1 אחר נחשבים "אתרים שונים".

מקור א' מקור ב' 'מאותו אתר' או 'מאתרים שונים'?
https://www.example.com:443 https://www.evil.com:443 בין אתרים: דומיינים שונים
https://login.example.com:443 אותו אתר: אין חשיבות לתת-דומיינים שונים
http://www.example.com:443 מאתרים שונים: סכמות שונות
https://www.example.com:80 אותו אתר: אין חשיבות ליציאות שונות
https://www.example.com:443 אותו אתר: התאמה מדויקת
https://www.example.com אותו אתר: יציאות לא חשובות

"באותו אתר ללא סכימה"

אותו אתר ללא סכימה

ההגדרה של 'אותו אתר' השתנתה והיא כוללת את סכמת כתובת ה-URL כחלק מהאתר, כדי למנוע שימוש ב-HTTP כערוץ חלש. המושג הישן של "אותו אתר" ללא השוואת סכימה נקרא עכשיו "באותו אתר ללא סכמה". לדוגמה, http://www.example.com ו-https://www.example.com נחשבים לאותו אתר ללא סכימה, אבל לא לאותו אתר, כי רק החלק eTLD+1 חשוב והסכימה לא נלקחת בחשבון.

מקור א' מקור ב' 'תוכן ללא הסכמה' או 'באתר אחר'?
https://www.example.com:443 https://www.evil.com:443 בין אתרים: דומיינים שונים
https://login.example.com:443 אותו אתר ללא סכימה: אין חשיבות לתת-דומיינים שונים
http://www.example.com:443 באותו אתר ללא סכימה: אין חשיבות לסכמות שונות
https://www.example.com:80 באותו אתר ללא סכימה: אין חשיבות ליציאות שונות
https://www.example.com:443 ללא סכימה של אותו אתר: התאמה מדויקת
https://www.example.com באותו אתר ללא סכימה: אין חשיבות ליציאות

איך בודקים אם הבקשה היא מסוג 'same-site', 'same-origin' או 'cross-site'

תמיכה בדפדפן

  • 76
  • 79
  • 90
  • 16.4

מקור

כל הדפדפנים המודרניים שולחים בקשות עם כותרת HTTP Sec-Fetch-Site. הכותרת כוללת אחד מהערכים הבאים:

  • cross-site
  • same-site (מתייחסת לאותו אתר סכמה)
  • same-origin
  • none

אפשר לבדוק את הערך של Sec-Fetch-Site על מנת לקבוע אם הבקשה היא same-site, Same-origin או Cross-site.

סביר להניח שאפשר לסמוך על הערך של הכותרת Sec-Fetch-Site, מהסיבות הבאות: