Sottodomini specifici dell'utente: sicurezza JavaScript

9

Se fornisco un sito web pubblico per gli utenti sul mio sito web al proprio sottodominio (ad esempio bob.myapp.com ) sotto il proprio controllo, posso consentire loro di eseguire JavaScript arbitrario senza mettere a rischio il mio server principale dell'app (ad esempio% codice%)? Gli utenti sarebbero in grado di inserire i propri file myapp.com nella radice pubblica dei loro sottodomini.

Ho una estremamente comprensione limitata della stessa politica di origine JS, ma ritengo che diversi sottodomini contengano origini diverse. Quindi se la mia app principale ( *.js ) è protetta da XSS ecc., C'è qualcosa di specifico di cui ho bisogno di preoccuparmi dai sottodomini degli utenti di cui non dovrei preoccuparmi per nessun'altra fonte esterna?

Grazie!

    
posta AviD 25.10.2012 - 20:17
fonte

2 risposte

5

Sì, devi preoccuparti. Mentre i sottodomini sono per lo più isolati dal tuo dominio principale (grazie alla politica della stessa origine, ci sono alcune eccezioni che potrebbero rappresentare un rischio.

Un rischio ha a che fare con i cookie. Lo script su bob.myapp.com può impostare un cookie per myapp.com . Questo cookie verrà inviato a myapp.com quando l'utente visita myapp.com . Questo può essere usato per attacchi di fissazione della sessione.

Ad esempio, il contenuto di un utente malintenzionato può impostare un cookie di sessione ( sessionid=1234 ) con dominio myapp.com . Quindi, quando l'utente visita myapp.com , il browser invierà il cookie di sessione impostato dall'utente malintenzionato. Poiché l'utente malintenzionato conosce l'ID sessione che l'utente utilizzerà, l'utente malintenzionato può ora dirottare la propria sessione.

Una soluzione è quella di ospitare il contenuto dell'utente su alice.myappusercontent.com , bob.myappusercontent.com , ecc., mentre la tua app è su myapp.com . Questo dovrebbe fermare questi attacchi.

Il riferimento classico per informazioni sulla politica dell'origine stessa e l'isolamento sul Web è il Manuale sulla sicurezza del browser . Vedi in particolare la sezione sulla politica della stessa origine e su vita al di fuori delle regole della stessa origine .

    
risposta data 28.10.2012 - 02:54
fonte
5

Da quanto ho capito, la politica della stessa origine proteggerà gli utenti AJAX l'uno dall'altro, ma non necessariamente il tuo sito principale. Ad esempio, user1.myapp.com non sarà in grado di inviare richieste a user2.myapp.com, ma sarà in grado di inviare richieste a myapp.com. Potresti risolvere questo problema costringendo il sito principale a utilizzare il sottodominio "www" (www.myapp.com) e inoltrare qualsiasi richiesta a myapp.com.

Ci sono alcune cose che potresti fare per proteggere i cookie della tua app principale. Assicurati che tutti i domini dei tuoi cookie siano associati a uno specifico e non siano jolly (ad esempio, * .myapp.com), altrimenti i sottodomini potranno accedervi. Puoi abilitare il flag HttpOnly per impedire agli utenti di rubare il cookie tramite javascript. Se gli utenti sono in grado di utilizzare le lingue sul lato server, posizionare l'applicazione principale su un sottodominio, altrimenti potranno accedere ai cookie. Sarebbe saggio abilitare anche il flag Secure.

Per maggiori informazioni sulla politica della stessa origine (e su molti altri argomenti relativi alla sicurezza delle applicazioni web), dai un'occhiata a Browser Security Handbook o il suo libro The Tangled Web .

    
risposta data 28.10.2012 - 03:19
fonte