Cordova / PhoneGap: RefreshToken in localstorage

15

Io sono (in parte) seguendo un tutorial per sviluppare un'app cordova, basata su angularJS. L'autore memorizza il token di aggiornamento nella memoria locale , che è stata considerata una pratica molto negativa in uno i commenti su quello stesso tutorial. Ciò è confermato in un'altra domanda di stackexchange . La procedura ottimale consiste quindi nel memorizzare il token di aggiornamento in un cookie sicuro HttpOnly . OWASP menziona anche questo come una linea guida, e di nuovo essi sostengono di usare i cookie, cosa che non è possibile in un app nativa.

Ora capisco perché è una cattiva pratica quando l'app è disponibile attraverso il browser, ma se faccio l'app su "phonegap" (in modo che diventi nativa) è quindi anche una cattiva pratica memorizzare l'aggiornamento token nella memoria locale?

In questo caso, dove dovrei memorizzare il token di aggiornamento, in quanto i cookie non esistono nelle app "native"?

    
posta Michael 29.10.2014 - 10:00
fonte

2 risposte

5

Bene, secondo la guida alla sicurezza di PhoneGap / Cordova sembra che la localizzazione non sia consiglia di memorizzare i dati sensibili. Quindi cosa puoi fare?

Bene, ecco due opzioni che penso tu possa usare.

1- Criptare il token di aggiornamento e archiviarlo crittografato nella cartella locale. Puoi utilizzare CryptoJS (una libreria JS per crittografare / decodificare i dati) per crittografare il tuo token utilizzando AES ( vedi questo esempio e ha anche un modulo angularjs

2- È possibile memorizzare il token di aggiornamento sul file system del dispositivo / telefono utilizzando API file Cordova . Per ulteriore livello di sicurezza è possibile crittografare i dati e memorizzarli sul file system del dispositivo. Nota su Android si sarà limitato alla dimensione della chiave AES a 128 bit, ma usando alcuni plugin di terze parti è possibile aumentarlo fino a 256.

    
risposta data 04.11.2014 - 10:28
fonte
2

In realtà le app di Phonebook non sono veramente "tutte native". Solo le funzionalità di sistema (come l'accesso ai file, l'accesso alla telecamera, ecc.) Sono tradotte nelle loro controparti Java. Usa ancora una webview e un sacco di javascript per implementare la logica di business dell'applicazione.

Quindi, rispondendo alla tua domanda, il problema di archiviazione locale è ancora un problema valido in quanto è una caratteristica del componente Web View utilizzato da questi framework (PhoneGap, Cordova, Ionic e simili) per rendere l'interfaccia utente.

Inoltre, tutte le richieste che portano elementi di identificazione / segreti (ID sessione, Token di aggiornamento, ecc.) devono essere eseguite tramite HTTPS , impedendo agli osservatori malintenzionati di conoscerne i valori.

Il flag HttpOnly contrassegnato nel tuo cookie impedisce solo che il valore venga manipolato tramite JavaScript. Pertanto, devi aggiungere il flag Secure a quei cookie, per evitare di inviarli tramite connessioni non crittografate.

E per favore, se usi connessioni crittografate, non farle accettare alcun certificato. Assicurati di verificare correttamente la validità del certificato fornito dal server.

Invece di disabilitare il controllo o renderlo "vero" per ogni certificato, la soluzione sicura per i certificati autofirmati è quella che hai generato o aggiunto alla CA utilizzata per creare il tuo certificato nell'elenco delle CA attendibili.

Per aiutarti ulteriormente nella ricerca della protezione della comunicazione dell'app per dispositivi mobili:

Documento OWASP che spiega Pinning del certificato
Pagina che parla dei pro e contro e fornisce collegamenti e un esempio
< a href="https://security.stackexchange.com/questions/29988/what-is-certificate-pinning"> domanda SE sull'attacco di certificati

Modifica :
Da quello che ho potuto capire, questo è un comportamento errato creato dall'implementazione del framework. Risposta lunga corta: "Dovrebbe essere possibile, ma abbiamo rovinato tutto." Ho provato a sviluppare app di prova per PhoneGap, ma ho trovato errori (di implementazione) come questo che mi hanno fatto perdere e tornare su Android nativo. Detto questo, vorrei che tu mi inviassi di nuovo la mia risposta a zero, come dovrebbe essere giusto perché la tua applicazione non è nativa come hai detto tu, ma sfortunatamente non è stato in grado di risolvere il problema a causa del modo in cui PhoneGap fa le cose. / p>     

risposta data 05.11.2014 - 13:50
fonte

Leggi altre domande sui tag