Same origin policy
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.
Indice |
Storia [modifica]
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]
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]
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 primo 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]
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]
- Un dettagliato confronto di diversi tipi di same-origin policy
- Una riesaminia delle mancanze delle same-origin policy e le relative implicazioni per la sicurezza della rete
- Esempio di specifiche di uno specifico browser (Mozilla) della same origin policy
- Sconfiggere, violare e bypassare la Same Origin Policy
|
|