2011-09-29 10 views
11

So che viola lo Same origin policy, ed è per questo che non è possibile tramite semplice richiesta Ajax. Potrei usare JSONP. Tuttavia, l'utilizzo di JSONP per l'accesso non sembra sicuro (non viene inviato solo il post).Chiamare HTTPS da HTTP a AJAX per l'accesso

Quindi esiste un modo più sicuro di implementare l'accesso in https tramite ajax?

+0

Sì, togliere 'HTTP' dall'equazione. Se esegui una richiesta 'GET' con origine all'interno di' HTTP', è un testo in chiaro. Altrimenti, metti un re-direct sul server per forzare 'HTTP' a' HTTPS' nella pagina di login. – Anders

risposta

13

Non solo viola lo same origin policy, ma dal momento che la pagina da cui si sta chiamando non è sicura, può potenzialmente interferire e perdere tutti i dati che si sta tentando di mantenere protetti.

Utilizzare HTTPS per l'intero processo.

Meglio ancora, continua a utilizzare HTTPS mentre le persone sono loggate, altrimenti avrai the Firesheep problem.

+0

Capisco che rischierei di farlo. Ma dal momento che nessuno dei contenuti del sito web viene generato dall'utente, riduce il rischio di interferire. Il servizio di accesso è in HTTPS, e voglio chiamarlo dal http – MarutiB

+0

Inoltre non posso usare https per tutte le pagine loggate, è un sito Web pesante e https sulla cache può davvero rallentare il mio sito web. – MarutiB

+0

@Quentin puoi approfondire quali sono i rischi? Come verranno divulgati i dati? – Dave

1

Come abbiamo discusso nei commenti qui sotto, questo è ciò che Facebook fa per la loro pagina di registrazione, anche se ci sono alcune vulnerabilità a questo metodo. Sebbene non appaia sicuro per l'utente (nessuna icona di blocco), la richiesta effettiva viene eseguita tramite HTTPS. Se hai controllato l'intera pagina di ricezione, non ci sarebbe nulla di meno sicuro nel fare una richiesta JSONP su GET. Tuttavia, un attacco man-in-the-middle potrebbe modificare la pagina di ricezione in fase di caricamento e far sì che le credenziali restituite vengano inviate a un utente malintenzionato.

Tra i lati positivi, però, nessuno che stia solo fiutando i pacchetti sarà in grado di ottenere le credenziali: un attacco dovrebbe essere abbastanza mirato.

Per quanto riguarda i cookie, tecnicamente, JSONP potrebbe "restituire" i cookie; dovresti solo restituire le coppie nome-valore dei cookie che volevi impostare e avere una funzione nella pagina di ricezione impostandole.

Tuttavia, a meno che il browser non consideri <script> s in modo diverso, potrebbe essere possibile impostare un cookie in modo normale utilizzando le intestazioni di risposta della risposta JSONP.

+0

Voglio rendere più facile per le persone registrarsi sul mio sito web. Che di nuovo deve essere sicuro. Quindi, quando qualcuno fa clic sul registro. Ho inserito un popup per la registrazione e quando ha fatto clic su register ho voluto che ciò accadesse tramite ajax. – MarutiB

+1

@MarutiB Sono tempi come questi che ho impostato su "Mi chiedo cosa faccia Facebook", e si scopre che fanno praticamente esattamente quello che stai cercando di fare. Quindi forse stai bene. Ma sì, JSONP o addirittura incluso javascript renderizzato dal sito https (stessa idea di JSONP) è la tua unica soluzione. Ulteriori informazioni sui cookie sopra. – Dave

+0

Lo so :(Immagino un piccolo costo da pagare in sicurezza per migliorare l'esperienza utente – MarutiB