Memorizzazione di password di servizi di terzi (web app)

4

Ho un'app Web che include siti Web di terze parti negli iframe. I siti web di terze parti richiedono che l'utente abbia effettuato l'accesso. L'opzione A richiede all'utente di accedere a ciascun sito Web individualmente tramite iframe e fare affidamento sui cookie per ricordare l'utente. Ciò tuttavia è abbastanza scomodo e alcuni utenti preferirebbero sicuramente un unico accesso per tutti i siti Web, quindi questa è la mia opzione B:

Si basa quasi interamente sulla sicurezza e sulla crittografia del frontend.

Innanzitutto, memorizzando la password. Ogni utente ha una password (password principale) per la mia app Web. La password, oltre ad essere utilizzata per l'accesso al mio sito Web, verrebbe anche utilizzata per crittografare le credenziali dell'utente dai siti Web degli utenti. Quindi le credenziali vengono crittografate usando la password principale sul mio server e solo l'utente può decrittografarle. È qui che ho una domanda, dovrei semplicemente crittografarla usando la password da solo, o alcune chiavi magiche segrete o alcune cose potrebbero essere utilizzate per rafforzare la crittografia?

Processo generale:

  • L'utente accede alla mia app Web.
  • La password principale è memorizzata nella memoria del browser per un ulteriore utilizzo
  • Estrazione di credenziali crittografate dal server e decodifica in frontend, usando la password principale

  • le credenziali decrittografate sono memorizzate nella memoria del browser

  • apri iframe di accesso e invia le credenziali usando postMessage al login iframe (inclusa la convalida dell'origine)

  • accedi automaticamente (ho un plugin di integrazione per i siti, ecco fatto perché potrei farlo).

Si noti che l'accesso all'app Web e la decrittografia delle credenziali sono 2 processi diversi. Se l'utente aggiorna il sito Web, è ancora connesso, non può accedere alle credenziali. Gli sarà richiesta di nuovo la password. Questo non è un problema, dal momento che la sessione da siti Web di terze parti verrà comunque ricordata dal browser.

Quindi i dati del frontend verrebbero protetti dagli iframe dalla sicurezza Web e fintanto che mi assicurerò che non ci siano sink XSS nell'app Web, non c'è modo che queste password perdano, vero? Anche se il server è stato compromesso.

L'unico modo in cui lo vedo, se il server è stato compromesso e qualcuno ha modificato il codice di frontend per essere malevolo e prendere le password. Ma è qualcosa che sarebbe sempre pericoloso, anche se non implementavo affatto l'autologin.

Voglio solo la tua opinione se questo è un modo sicuro per archiviare e utilizzare password e cosa potrebbe potenzialmente andare storto. Soprattutto, è sicuro archiviare le password nella memoria javascript e come crittografare le credenziali - utilizzare solo la password dell'utente o magari aggiungere un token segreto a tale password (non so se abbia senso). Tutto ciò che lo renderebbe più sicuro. Qualsiasi aiuto apprezzato.

    
posta Maciej Krawczyk 03.03.2017 - 18:26
fonte

2 risposte

2

Il modo migliore per farlo sarebbe attraverso oAuth. Controlla la documentazione sui siti Web per vedere se è un'opzione valida. In caso contrario, non è consigliabile memorizzare le credenziali utente in qualsiasi forma su un server web, un browser o qualsiasi altra cosa. Normalmente quando si convalida un login si sta verificando che l'hash (più un salt) della password corrisponda a ciò che si trova nel database. La password non viene mai effettivamente archiviata nel database nemmeno in forma crittografata. In questo scenario non è possibile per un utente malintenzionato sapere quale sia la password per l'utente anche se sono in grado di compromettere il database (a meno di un attacco di forza bruta).

    
risposta data 03.03.2017 - 18:49
fonte
2

Se comprendo correttamente la tua domanda, vuoi presentarti come un intermediario fidato, che memorizzerà i LORO login sul tuo server.

Anche se ciò è tecnicamente possibile senza innalzare bandiere rosse e avvertimenti dappertutto, sarà difficile per convincere gli utenti a fidarsi ciecamente con le loro password. Perché gestirai le loro password in testo semplice quando li accedi. Le impersonerai . Seriamente un'idea BAD!

Quindi, a meno che non ci sia un accordo legale completo sul fatto che TU sei intrinsecamente affidabile per gestire le password, ti consiglierei di non seguire quel percorso a causa di problemi legali da solo.

Tecnicamente, è sempre una cattiva idea memorizzare le password, anche se crittografate, ed è ancora peggio l'idea di usare quelle password per registrare gli utenti solo per comodità.

Suppongo che tu non abbia il controllo su questi altri siti, perché in tal caso potresti forse stabilire fiducia in un altro modo, non mescolando le password in giro.

    
risposta data 03.03.2017 - 18:57
fonte