Same origin policy

Da Wikipedia, l'enciclopedia libera.

In informatica, la same origin policy (regola della stessa origine) è un importante concetto di sicurezza informatica per un ampio gruppo di linguaggi di script lato client, come per esempio JavaScript. La regola permette agli script in esecuzione in pagine che provengono dallo stesso sito di accedere ai reciproci metodi e proprietà senza specifiche restrizioni, impedendo invece l'accesso alla maggior parte dei metodi e delle proprietà tra pagine provenienti da siti diversi.

Questo meccanismo è diventato di particolare importanza per le moderne applicazioni web che dipendono in modo esteso dai cookie HTTP per mantenere le sessioni utente autenticate, dal momento che i server agiscono in base alle informazioni dei cookie per mostrare informazioni riservate o per effettuare azioni di cambio di stato. Una rigorosa separazione tra i contenuti che provengono da siti non correlati tra loro, deve essere garantita dal lato client per prevenire la perdita dell'integrità e riservatezza dei dati.

Storia[modifica | modifica sorgente]

Il concetto di same origin policy è da far risalire a Netscape Navigator 2.0. Tutti i browser moderni usano una versione molto simile al progetto progenitore; i suoi principi sono spesso estesi anche per altri linguaggi di scripting come per esempio Adobe Flash o per meccanismi diversi dalla manipolazione diretta del DOM, come per esempio XMLHttpRequest.

Regole per la determinazione dell'origine[modifica | modifica sorgente]

Il termine "origine" è definito usando il nome di dominio, il protocollo di livello di applicazioni usato, e (nella maggior parte dei browser) la porta TCP del documento HTML di cui vengono eseguiti gli script. Due risorse sono considerate avere la stessa origine se e solo se tutti e tre i valori sono esattamente gli stessi. Per illustrare meglio il concetto, la seguente tabella riporta i risultati del controllo della same origin policy rispetto all'URL "http://www.example.com/dir/page.html".

URL controllato Risultato Motivo
http://www.example.com/dir/page.html Successo Stesso protocollo e host
http://www.example.com/dir2/other.html Successo Stesso protocollo e host
http://www.example.com:81/dir/other.html Fallimento Stesso protocollo e host ma porta diversa
https://www.example.com/dir/other.html Fallimento Protocollo diverso
http://en.example.com/dir/other.html Fallimento Host diverso
http://example.com/dir/other.html Fallimento Host diverso (è necessario che siano esattamente uguali)
http://v2.www.example.com/dir/other.html Fallimento Host diverso (è necessario che siano esattamente uguali)

Logica aggiuntiva del document.domain[modifica | modifica sorgente]

Un importante estensione della same origin policy prevista per l'accesso JavaScript al DOM (ma non per la maggior parte degli altri tipi di controllo di "stessa origine") è che due siti che condividono uno stesso dominio di secondo livello possono optare di comunicare malgrado non abbiano lo stesso host se entrambi settano la propria proprietà DOM document.domain alla comune parte destra del proprio nome di host.

Per esempio, se http://en.example.com/ e http://fr.example.com/ entrambi settassero document.domain a "example.com", essi potrebbero, a partire da quel momento, considerarsi come aventi la stessa origine nel caso si stiano eseguendo modifiche del DOM.

Espedienti[modifica | modifica sorgente]

Per permettere agli sviluppatori di eludere la Same Origin Policy, sempre però in maniera controllata, esistono un certo numero di 'hack' come l'utilizzo dell'Identificatore di Frammento o la proprietà `window.name` per passare dati tra documenti che risiedono su domini differenti. Con l'avvento dello standard HTML5 è stato finalmente formalizzato a tale scopo l'interfaccia `postMessage`, che è però disponibile solo nei browser più recenti.

Per supportare i browser più vecchi, può essere usata la libreria javascript easyXDM che fornisce un'API (interfaccia) unificata sia per l'interfaccia `postMessage` che per un certo numero di hack usati per permettere la Cross Domain Communication (XDM) (comunicazione tra diversi domini). Questa libreria permette anche di creare metodi per effettuare chiamate di procedure remote, e può quindi essere usata per accedere facilmente a metodi con argomenti in ingresso e valori di ritorno che valicano i confini del dominio; questo sempre garantendo che la comunicazione sia sicura. easyXDM è al momento usata dai maggiori siti come Disqus, Twitter e Scribd.

Collegamenti esterni[modifica | modifica sorgente]

Sicurezza informatica Portale Sicurezza informatica: accedi alle voci di Wikipedia che trattano di Sicurezza informatica