Criterio della stessa origine

Mariko Kosaka

Il criterio della stessa origine è una funzionalità di sicurezza del browser che limita il modo in cui documenti e script su un'origine possono interagire con le risorse su un'altra origine.

Un browser può caricare e visualizzare risorse di più siti contemporaneamente. Potresti avere aprire contemporaneamente più schede oppure un sito potrebbe incorporare più iframe da siti diversi. In assenza di limitazioni alle interazioni tra questi e uno script viene compromesso da un utente malintenzionato, lo script potrebbe esporre tutti gli elementi nel browser di un utente.

Il criterio della stessa origine impedisce che ciò accada bloccando l'accesso in lettura a di risorse caricate da un'origine diversa. "Ma aspetta" dici: "Carico immagini e script da altre origini sempre." I browser consentono ad alcuni tag incorporare risorse da un'origine diversa. Questo criterio è principalmente un retaggio storico e può esporre il sito a vulnerabilità come clickjacking utilizzando iframe. Puoi limitare la lettura multiorigine di questi tag utilizzando uno strumento di sicurezza del contenuto Norme.

Cosa si considera della stessa origine?

Un'origine è definita dallo schema (noto anche come protocollo, ad esempio HTTP o HTTPS), porta (se specificata) e host. Quando tutti e tre gli elementi sono uguali per due URL, sono considerati della stessa origine. Ad esempio: http://www.example.com/foo è la stessa origine di http://www.example.com/bar ma non https://www.example.com/bar perché lo schema è diverso.

Cosa è consentito e cosa è bloccato?

In genere, è consentito incorporare una risorsa multiorigine, durante la lettura di un risorsa multiorigine è bloccata.

iframe Generalmente l'incorporamento multiorigine è consentito (a seconda dell'istruzione X-Frame-Options), ma non la lettura multiorigine (ad esempio, l'utilizzo di JavaScript per accedere a un documento in un iframe).
CSS Il CSS multiorigine può essere incorporato utilizzando un elemento <link> o @import in un file CSS. Potrebbe essere necessaria l'intestazione Content-Type corretta.
moduli Gli URL multiorigine possono essere utilizzati come valore dell'attributo action degli elementi del modulo. Un'applicazione web può scrivere dati dei moduli in una destinazione multiorigine.
immagini È consentito l'incorporamento di immagini multiorigine. Tuttavia, la lettura dei dati di immagini multiorigine (ad esempio il recupero di dati binari da un'immagine multiorigine utilizzando JavaScript) è bloccata.
multimedialità I video e l'audio multiorigine possono essere incorporati utilizzando gli elementi <video> e <audio>.
scrittura Gli script multiorigine possono essere incorporati; tuttavia, l'accesso a determinate API (ad esempio le richieste di recupero multiorigine) potrebbe essere bloccato.

DA FARE: DevSite - Valutazione Think and Check

Come impedire il clickjacking

clickjacking
. Figura: meccanismo di clickjacking illustrato in tre livelli separati (sito di base, sito con iframe, pulsante trasparente).

Un attacco chiamato "clickjacking" incorpora un sito in un iframe e si sovrappone pulsanti trasparenti che rimandano a una destinazione diversa. Gli utenti vengono ingannati pensare di accedere alla tua applicazione e inviare dati a gli aggressori.

Per impedire ad altri siti di incorporare il tuo sito in un iframe, aggiungi un contenuto norme di sicurezza con frame-ancestors istruzione alle intestazioni HTTP.

In alternativa, puoi aggiungere X-Frame-Options alle intestazioni HTTP MDN per l'elenco di opzioni.

Conclusione

Speriamo che tu ti senta un po' sollevato dal fatto che i browser lavorino sodo per tenere sotto controllo la sicurezza sul web. Anche se i browser cercano di essere sicuri bloccando l'accesso alle risorse, a volte potresti voler accedere alle risorse multiorigine diverse applicazioni. Nella prossima guida, scoprirai la condivisione delle risorse tra origini (CORS) e come comunicare al browser che il caricamento delle risorse multiorigine consentito da fonti attendibili.