"همان سایت» و «همان منبع»

اصطلاحات "Same-site" و "Same-origin" اغلب ذکر می شوند، اما اغلب به اشتباه درک می شوند. به عنوان مثال، آنها در زمینه انتقال صفحه، درخواست‌های fetch() ، کوکی‌ها، باز کردن پنجره‌های بازشو، منابع جاسازی شده و iframe استفاده می‌شوند. این صفحه توضیح می دهد که آنها چیست و چگونه با یکدیگر متفاوت هستند.

اصل و نسب
ساختار یک مبدا.

"Origin" ترکیبی از یک طرح (همچنین به عنوان پروتکل شناخته می شود، برای مثال HTTP یا HTTPS )، یک نام میزبان ، و یک پورت (در صورت مشخص شدن). برای مثال، با توجه به URL https://www.example.com:443/foo ، "origin" https://www.example.com:443 است.

"منشا یکسان" و "مبدأ متقابل"

وب‌سایت‌هایی که ترکیبی از طرح، نام میزبان و پورت یکسان دارند، «منشأ یکسان» در نظر گرفته می‌شوند. هر چیز دیگری "منشا متقاطع" در نظر گرفته می شود.

مبدا A مبدا B "همان منشاء" یا "تقاطع"؟
https://www.example.com:443 https://www.evil.com :443 مبدا متقابل: دامنه های مختلف
https:// example.com :443 Cross-origin: زیر دامنه های مختلف
https:// login .example.com:443 Cross-origin: زیر دامنه های مختلف
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 فهرست شده اند. در قبلی
به عنوان مثال، "سایت" ترکیبی از طرح ، TLD ، و بخشی از دامنه درست قبل از آن است (ما آن را TLD+1 می نامیم). برای مثال، با توجه به URL https://www.example.com:443/foo ، "سایت" https://example.com است.

فهرست پسوند عمومی و eTLD

برای دامنه هایی با عناصری مانند .co.jp یا .github.io ، استفاده از .jp یا .io به اندازه کافی برای شناسایی «سایت» خاص نیست. هیچ راهی برای تعیین الگوریتمی سطح دامنه های قابل ثبت برای یک TLD خاص وجود ندارد. برای کمک به آن، فهرست پسوندهای عمومی فهرستی از پسوندهای عمومی را تعریف می کند که TLD های موثر (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 متفاوتی دارند «متقابل سایت» هستند.

مبدا A مبدا B "Same-site" یا "Cross-site"؟
https://www.example.com:443 https://www.evil.com :443 Cross-site: دامنه های مختلف
https:// login .example.com:443 همان سایت: زیر دامنه های مختلف مهم نیستند
http://www.example.com:443 Cross-site: طرح های مختلف
https://www.example.com: 80 همان سایت: پورت های مختلف مهم نیست
https://www.example.com:443 همان سایت: مطابقت دقیق
https://www.example.com همان سایت: پورت ها مهم نیستند

"همان سایت بدون طرح"

همان سایت بدون طرح

برای جلوگیری از استفاده از HTTP به عنوان یک کانال ضعیف، تعریف "همان سایت" تغییر کرد تا طرح URL را به عنوان بخشی از سایت در بر گیرد. مفهوم قدیمی تر "سایت یکسان" بدون مقایسه طرح، اکنون "همان سایت بدون طرح" نامیده می شود. برای مثال، http://www.example.com و https://www.example.com به عنوان یک سایت بدون طرح در نظر گرفته می شوند، اما یک سایت یکسان نیستند، زیرا فقط قسمت eTLD+1 مهم است و این طرح در نظر گرفته نمی شود.

مبدا A مبدا B "Schemeless same-site" یا "cross-site"؟
https://www.example.com:443 https://www.evil.com :443 Cross-site: دامنه های مختلف
https:// login .example.com:443 همان سایت بدون طرح: زیر دامنه های مختلف مهم نیستند
http://www.example.com:443 همان سایت بدون طرح: طرح‌های مختلف مهم نیستند
https://www.example.com: 80 همان سایت بدون طرح: پورت های مختلف مهم نیستند
https://www.example.com:443 همان سایت بدون طرح: مطابقت دقیق
https://www.example.com همان سایت بدون طرح: پورت ها مهم نیستند

چگونه بررسی کنیم که آیا یک درخواست "همان سایت"، "همان منبع" یا "مقطع سایت" است

پشتیبانی مرورگر

  • 76
  • 79
  • 90
  • 16.4

منبع

همه مرورگرهای مدرن درخواست ها را با سرآیند Sec-Fetch-Site HTTP ارسال می کنند. هدر یکی از مقادیر زیر را دارد:

  • cross-site
  • same-site (اشاره به همان سایت طرح دار)
  • same-origin
  • none

می‌توانید مقدار Sec-Fetch-Site را بررسی کنید تا مشخص کنید درخواست یک سایت، یک منبع یا متقاطع است.

شما می توانید به طور منطقی به مقدار هدر Sec-Fetch-Site اعتماد کنید، زیرا: