"Situs yang sama" dan "asal yang sama"

"Situs yang sama" dan "asal yang sama" adalah istilah yang sering dikutip, tetapi sering kali salah dipahami. Misalnya, cookie digunakan dalam konteks transisi halaman, permintaan fetch(), cookie, membuka pop-up, resource tersemat, dan iframe. Halaman ini menjelaskan definisinya dan perbedaannya satu sama lain.

Asal

Asal
Struktur origin.

"Origin" 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.

"Sama asal" dan "lintas asal"

Situs yang memiliki kombinasi skema, nama host, dan port yang sama dianggap sebagai "origin yang sama". Semua yang lain dianggap "lintas-asal".

Origin A Asal B "Sama asal" atau "lintas asal"?
https://www.example.com:443 https://www.evil.com:443 Lintas-asal: domain yang berbeda
https://example.com:443 Lintas origin: subdomain yang berbeda
https://login.example.com:443 Lintas origin: subdomain yang berbeda
http://www.example.com:443 Lintas origin: skema yang berbeda
https://www.example.com:80 Lintas origin: port yang berbeda
https://www.example.com:443 Sama asal: pencocokan persis
https://www.example.com Sama asal: kecocokan nomor port implisit (443)

Situs

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

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

Daftar Suffix Publik dan eTLD

Untuk domain dengan elemen seperti .co.jp atau .github.io, hanya menggunakan .jp atau .io tidak cukup spesifik untuk mengidentifikasi "situs". Tidak ada cara untuk menentukan tingkat domain yang dapat didaftarkan secara algoritmis untuk TLD tertentu. Untuk membantu hal tersebut, Daftar Suffix Publik menentukan daftar suffix publik, yang juga disebut TLD efektif (eTLD). Daftar eTLD dikelola 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-nya adalah .github.io, dan eTLD+1-nya adalah project.github.io, sehingga https://project.github.io dianggap sebagai "situs" untuk URL ini.

Situs (eTLD+1)
Bagian URL dengan eTLD.

"dalam situs" dan "lintas situs"

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

Origin A Asal B "Dalam situs yang sama" atau "lintas situs"?
https://www.example.com:443 https://www.evil.com:443 Lintas situs: domain yang berbeda
https://login.example.com:443 Situs yang sama: subdomain yang berbeda tidak masalah
http://www.example.com:443 Antarsitus: skema yang 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 Dalam situs yang sama: port tidak berpengaruh

"Situs yang sama tanpa skema"

same-site tanpa skema

Definisi "situs yang sama" diubah untuk menyertakan skema URL sebagai bagian dari situs untuk mencegah HTTP digunakan sebagai saluran yang lemah. Konsep lama "situs yang sama" tanpa perbandingan skema kini 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.

Origin A Asal B "Sama situs tanpa skema" atau "lintas situs"?
https://www.example.com:443 https://www.evil.com:443 Lintas situs: domain yang berbeda
https://login.example.com:443 Situs yang sama tanpa skema: subdomain yang berbeda tidak masalah
http://www.example.com:443 Same-site 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 Same-site tanpa skema: port tidak berpengaruh

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

Browser Support

  • Chrome: 76.
  • Edge: 79.
  • Firefox: 90.
  • Safari: 16.4.

Source

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

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

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

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