Memahami "situs yang sama" dan "asal yang sama"

"situs yang sama" dan "origin yang sama" sering disebut, tetapi sering kali disalahpahami. Misalnya, keduanya disebutkan dalam konteks transisi halaman, permintaan fetch(), cookie, pop-up pembuka, resource tersemat, dan iframe.

Origin

Origin

"Asal" adalah kombinasi dari skema (juga dikenal sebagai protokol, misalnya HTTP atau HTTPS), nama host, dan port (jika ditentukan). Misalnya, dengan URL https://www.example.com:443/foo, "origin" adalah https://www.example.com:443.

"same-origin" dan "cross-origin"

Situs yang memiliki kombinasi skema, nama host, dan port yang sama dianggap "origin yang sama". Lainnya dianggap "lintas asal".

Asal A Asal B Penjelasan apakah Asal A dan B adalah "asal yang sama" atau "lintas asal"
https://www.example.com:443 https://www.evil.com:443 lintas asal: domain berbeda
https://example.com:443 lintas asal: subdomain berbeda
https://login.example.com:443 lintas asal: subdomain berbeda
http://www.example.com:443 lintas asal: skema berbeda
https://www.example.com:80 lintas asal: port berbeda
https://www.example.com:443 same-origin: pencocokan persis
https://www.example.com same-origin: implicit port number (443) cocok

Situs

Situs (TLD+1)

Domain level teratas (TLD) seperti .com dan .org tercantum dalam Database Zona Root. Pada contoh di atas, "situs" adalah kombinasi dari skema, TLD, dan bagian dari domain tepat sebelumnya (Kita menyebutnya TLD+1). Misalnya, dengan URL https://www.example.com:443/foo, "situs" adalah https://example.com.

Daftar Akhiran Publik dan eTLD

Untuk domain yang menyertakan hal-hal seperti .co.jp atau .github.io, hanya penggunaan .jp atau .io tidak cukup terperinci untuk mengidentifikasi "situs". Tidak ada cara algoritma untuk menentukan tingkat domain yang dapat didaftarkan untuk TLD tertentu. Itulah sebabnya daftar akhiran publik yang ditentukan dalam Daftar Suffix Publik dibuat. Akhiran publik ini juga disebut TLD yang efektif (eTLD). Daftar eTLD dipertahankan di publicsuffix.org/list.

Untuk mengidentifikasi bagian "situs" dari domain yang menyertakan eTLD, terapkan praktik yang sama seperti contoh dengan .com. Dengan mengambil https://www.project.github.io:443/foo sebagai contoh, skemanya adalah https, eTLD adalah .github.io, dan eTLD+1 adalah project.github.io, sehingga https://project.github.io dianggap sebagai "situs" untuk URL ini.

Situs (eTLD+1)

"situs yang sama" dan "lintas situs"

Situs yang memiliki skema dan eTLD+1 yang sama dianggap "situs yang sama". Situs yang memiliki skema berbeda atau eTLD+1 yang berbeda adalah "lintas situs".

Asal A Asal B Penjelasan apakah Asal A dan B adalah "situs yang sama" atau "lintas situs"
https://www.example.com:443 https://www.evil.com:443 lintas situs: domain berbeda
https://login.example.com:443 situs yang sama: subdomain yang berbeda tidak berpengaruh
http://www.example.com:443 lintas situs: skema berbeda
https://www.example.com:80 situs yang sama: port yang berbeda tidak berpengaruh
https://www.example.com:443 situs yang sama: pencocokan persis
https://www.example.com situs yang sama: port tidak berpengaruh

"situs yang sama tanpa skema"

situs yang sama tanpa skema

Definisi "situs yang sama" berkembang sehingga menganggap skema URL sebagai bagian dari situs untuk mencegah HTTP digunakan sebagai saluran lemah. Konsep lama "situs yang sama" tanpa perbandingan skema sekarang disebut "situs yang sama tanpa skema". Misalnya, http://www.example.com dan https://www.example.com dianggap sebagai situs yang sama tanpa skema, tetapi bukan situs yang sama, karena hanya bagian eTLD+1 yang penting dan skema tidak diperhitungkan.

Asal A Asal B Penjelasan apakah Asal A dan B merupakan "situs yang sama tanpa skema"
https://www.example.com:443 https://www.evil.com:443 lintas situs: domain berbeda
https://login.example.com:443 situs yang sama tanpa skema: subdomain yang berbeda tidak berpengaruh
http://www.example.com:443 situs yang sama tanpa skema: skema yang berbeda tidaklah penting
https://www.example.com:80 situs yang sama tanpa skema: port yang berbeda tidak masalah
https://www.example.com:443 situs yang sama tanpa skema: pencocokan persis
https://www.example.com situs yang sama tanpa skema: port tidak berpengaruh

Cara memeriksa apakah permintaan merupakan "situs yang sama", "origin yang sama", atau "lintas situs"

Semua browser modern (Safari mendukung segera landing) mengirim permintaan bersama header HTTP Sec-Fetch-Site. Header memiliki salah satu nilai berikut:

  • cross-site
  • same-site
  • same-origin
  • none

Dengan memeriksa nilai Sec-Fetch-Site, Anda dapat menentukan apakah permintaan merupakan "situs yang sama", "origin yang sama", atau "lintas situs".