Modo sicuro di aprire la pagina web da iOS senza bisogno di accedere

1

Sto sviluppando un'applicazione iOS e una pagina Web, entrambi utilizzano lo stesso back-end di Parse.

La pagina Web contiene alcune funzionalità che non sono disponibili nell'applicazione iOS. Pertanto vorrei presentare all'utente un'opzione per aprire la pagina iniziale dall'app. Dato che l'utente ha già effettuato l'accesso prima nell'app, desidero saltare la procedura di accesso quando viene aperta la pagina iniziale.

Ho una soluzione nella mia testa per la quale vorrei la tua opinione. Quando l'utente fa clic su un link nell'app, l'app chiamerà per es. La funzione generateToken in Parse che creerebbe un token casuale, la memorizzerà con una data di scadenza per questo utente e la restituirà all'app. L'app aprirà quindi la pagina Web con il parametro di query token = newly_generated_token o passerà il valore del token nelle intestazioni http se ciò è possibile.
Alla nuova richiesta il codice del server controllerebbe se il parametro (o intestazione) token esiste, controlla il valore di token db e accede all'utente appropriato in cui trovare la corrispondenza. Successivamente il token sarebbe stato invalidato. Se la richiesta non conterrà alcun parametro 'token', passerà la normale autenticazione e verrà visualizzata la pagina di accesso. Tutta la comunicazione sarebbe sopra https.

Ho eliminato l'attacco di riproduzione invalidando il token quando usato. È vulnerabile a qualsiasi altro attacco? O c'è un altro modo per farlo?

Qualsiasi aiuto apprezzato. Grazie!

    
posta tmin 09.06.2014 - 17:50
fonte

1 risposta

2

L'attacco di riproduzione è solo un problema se si invia il token su un meccanismo in chiaro (HTTP), nel qual caso il contenuto della pagina sarà disponibile anche per l'autore dell'attacco. La tecnica che hai descritto è valida, ma puoi anche farlo senza dover scrivere in DB. Sul lato server, puoi semplicemente calcolare un HMAC attraverso un ID risorsa univoco (id utente se è uno per utente) e una scadenza. Dopo aver ricevuto questo token, il server può validarlo come legittimo e verificare che il token non sia scaduto, quindi presentare il contenuto all'utente.

  1. App chiama / getToken? resource = foo
  2. Il server genera token: token = foo || ora () + 15 minuti
  3. Token di segni del server: h = HMAC (chiave, token)
  4. Il server restituisce un token firmato: token || h
  5. L'app apre il browser a / resource? token = token
  6. Il server convalida che l'hash sul token è valido per la risorsa richiesta all'orario richiesto.
  7. Il server fornisce contenuti al browser dell'utente.
risposta data 09.06.2014 - 19:10
fonte

Leggi altre domande sui tag