"Situs yang sama" dan "asal yang sama"

Istilah "Same-site" dan "same-origin" sering disebut, tetapi sering disalahpahami. Misalnya, atribut ini digunakan dalam konteks transisi halaman, permintaan fetch(), cookie, pop-up pembuka, resource tersemat, dan iframe. Halaman ini menjelaskan definisi dan perbedaannya satu sama lain.

Origin

Origin
Struktur 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 "Same-origin" atau "cross-origin"?
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 Origin yang sama: pencocokan persis
https://www.example.com Asal yang sama: kecocokan nomor port implisit (443)

Situs

Situs (TLD+1)
Bagian-bagian URL yang membentuk situs.

Domain level teratas (TLD) seperti .com dan .org tercantum dalam Database Zona Root. Pada contoh
sebelumnya, "situs" adalah kombinasi skema, TLD, dan bagian dari domain tepat sebelum (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 dengan elemen seperti .co.jp atau .github.io, hanya penggunaan .jp atau .io tidak cukup spesifik untuk mengidentifikasi "situs". Tidak ada cara algoritma untuk menentukan tingkat domain yang dapat didaftarkan untuk TLD tertentu. Untuk membantu melakukannya, Daftar Suffix Publik menentukan daftar akhiran publik, yang 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)
Bagian URL dengan eTLD.

"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 "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" diubah untuk menyertakan 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 dipertimbangkan.

Asal A Asal B "Situs yang sama tanpa skema" 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 tanpa skema: subdomain yang berbeda tidak berpengaruh
http://www.example.com:443 Situs yang sama tanpa skema: skema yang berbeda tidak berpengaruh
https://www.example.com:80 Situs yang sama tanpa skema: port yang berbeda tidak berpengaruh
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"

Dukungan Browser

  • 76
  • 79
  • 90
  • 16,4

Sumber

Semua browser modern mengirim permintaan dengan header HTTP Sec-Fetch-Site. Header memiliki salah satu nilai berikut:

  • cross-site
  • same-site (mengacu pada situs yang sama dengan skema)
  • same-origin
  • none

Anda dapat memeriksa nilai Sec-Fetch-Site untuk menentukan apakah permintaan tersebut memiliki situs yang sama, origin yang sama, atau lintas situs.

Anda dapat memercayai nilai header Sec-Fetch-Site secara wajar, karena: