"same-site" e "same-origin" sono termini citati spesso ma spesso fraintesi. Ad esempio, sono menzionati nel contesto di transizioni di pagina, richieste fetch()
, cookie, apertura di popup, risorse incorporate e iframe.
Origin
"Origin" è una combinazione di uno
schema
(noto anche come
protocollo, ad esempio HTTP o
HTTPS),
nome host e
porta
(se specificato). Ad esempio, dato un URL di https://www.example.com:443/foo
,
l'"origine" è https://www.example.com:443
.
"same-origin" e "cross-origin"
I siti web che hanno la combinazione dello stesso schema, nome host e porta sono considerati "stessa origine". Tutto il resto è considerato "interorigine".
Origine A | Origine B | Spiegazione se le origini A e B sono "stessa origine" o "cross-origin" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | multiorigine: domini diversi |
https://example.com:443 | cross-origin: sottodomini diversi | |
https://login.example.com:443 | cross-origin: sottodomini diversi | |
http://www.example.com:443 | cross-origin: schemi diversi | |
https://www.example.com:80 | cross-origin: porte diverse | |
https://www.example.com:443 | same-origin: corrispondenza esatta | |
https://www.example.com | same-origin: il numero di porta implicito (443) corrisponde a |
Sito
I domini di primo livello (TLD) come .com
e .org
sono elencati nel database della zona radice. Nell'esempio precedente, "sito" è la combinazione dello schema, del TLD e della parte del dominio immediatamente precedente (lo chiamiamo TLD+1). Ad esempio, dato un URL di https://www.example.com:443/foo
, il "sito" è https://example.com
.
Elenco di suffissi pubblici ed eTLD
Per i domini che includono elementi come .co.jp
o .github.io
, il semplice utilizzo di .jp
o .io
non è sufficientemente granulare da identificare il "sito". Non è possibile
determinare in modo algoritmico il livello dei domini registrabili per un determinato dominio di primo livello.
Ecco perché è stato creato un elenco di suffissi pubblici definiti nell'elenco di suffissi pubblici. Questi suffissi pubblici sono chiamati anche TLD effettivi (eTLD). L'elenco di eTLD è disponibile all'indirizzo publicsuffix.org/list.
Per identificare la parte "sito" di un dominio che include un eTLD, applica la stessa
pratica dell'esempio con .com
. Prendendo come esempio https://www.project.github.io:443/foo
, lo schema è https
, l'eTLD è .github.io
e l'eTLD+1 è project.github.io
, quindi https://project.github.io
è considerato il "sito" di questo URL.
"stesso sito" e "cross-site"
I siti web che hanno lo stesso schema e lo stesso eTLD+1 sono considerati "stesso sito". I siti web che hanno uno schema diverso o un eTLD+1 diverso sono "cross-site".
Origine A | Origine B | Spiegazione se le origini A e B sono "stesso sito" o "cross-site" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | cross-site: domini diversi |
https://login.example.com:443 | same-site: sottodomini diversi non contano | |
http://www.example.com:443 | cross-site: schemi diversi | |
https://www.example.com:80 | same-site: porte diverse non contano | |
https://www.example.com:443 | same-site: corrispondenza esatta | |
https://www.example.com | same-site: le porte non contano |
"stesso sito senza schema"
La definizione di "same-site" si è evoluta per considerare lo schema URL come parte del sito al fine di evitare che HTTP venga utilizzato come un canale debole.
Il precedente concetto di "stesso sito" senza confronto tra schemi ora si chiama "stesso sito senza schema". Ad esempio, http://www.example.com
e
https://www.example.com
sono considerati senza schema same-site ma non same-site,
perché solo la parte eTLD+1 è importante e lo schema non viene preso in considerazione.
Origine A | Origine B | Spiegazione se le origini A e B sono "stesso sito senza schema" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | cross-site: domini diversi |
https://login.example.com:443 | schemeless same-site: sottodomini diversi non contano | |
http://www.example.com:443 | senza schema sullo stesso sito: schemi diversi non contano | |
https://www.example.com:80 | stesso sito senza schema: porte diverse non contano | |
https://www.example.com:443 | schemeless same-site: corrispondenza esatta | |
https://www.example.com | schemeless same-site: le porte non contano |
Come controllare se una richiesta è "same-site", "same-origin" o "cross-site"
Tutti i browser moderni (supportano Safari a breve) inviano le richieste insieme a un'intestazione HTTP Sec-Fetch-Site
. L'intestazione ha uno dei seguenti valori:
cross-site
same-site
same-origin
none
Esaminando il valore di Sec-Fetch-Site
, puoi determinare se la richiesta è "same-site", "same-origin" o "cross-site".