Cordova / Phonegap: RefreshToken in localstorage

15

Estoy (en parte) siguiendo a tutorial para desarrollar una aplicación cordova, basada en angularJS. El autor almacena el token de actualización en almacenamiento local , que se dice que es una práctica muy mala en uno de Los comentarios sobre ese mismo tutorial. Esto se confirma en otra pregunta de intercambio de pila . La mejor práctica es almacenar el token de actualización en una cookie HttpOnly segura. OWASP también menciona esto como una guía, y de nuevo discuten el uso de cookies, que no es posible en una aplicación nativa.

Ahora, puedo ver por qué es una mala práctica cuando la aplicación está disponible a través del navegador, pero si hago una "pausa" en la aplicación (para que se convierta en una aplicación nativa), también es una mala práctica almacenar la actualización. token en almacenamiento local?

Si es así, ¿dónde debería guardar el token de actualización entonces, ya que las cookies no existen en las aplicaciones 'nativas'?

    
pregunta Michael 29.10.2014 - 10:00
fuente

2 respuestas

5

Bueno, según Guía de seguridad de PhoneGap / Cordova parece que el almacenamiento local no es Recomendamos almacenar datos confidenciales. Entonces, ¿qué puedes hacer?

Bueno, aquí hay dos opciones que creo que puedes usar.

1- Cifre el token de actualización y guárdelo cifrado en el almacenamiento local. Puede usar CryptoJS (una biblioteca JS para cifrar / descifrar los datos) para cifrar su token utilizando AES ( vea este ejemplo ) y también tiene un módulo angularjs

2- Puede almacenar su token de actualización en el sistema de archivos del dispositivo / teléfono usando API de archivo Cordova . Para un nivel adicional de seguridad, puede cifrar los datos y almacenarlos en el sistema de archivos del dispositivo. Tenga en cuenta que en Android estará limitado a un tamaño de clave AES de 128 bits, pero con un complemento de terceros puede aumentar a 256.

    
respondido por el Ubaidah 04.11.2014 - 10:28
fuente
2

En realidad, las aplicaciones de Phonegap no son realmente "todas nativas". Solo las funcionalidades del sistema (como el acceso a archivos, el acceso a la cámara, etc.) se traducen a sus partes de Java. Todavía utiliza una vista web y un montón de javascript para implementar la lógica empresarial de la aplicación.

Entonces, respondiendo a su pregunta, el problema del almacenamiento local sigue siendo una preocupación válida, ya que es una característica del componente de Vista Web utilizado por estos marcos (PhoneGap, Cordova, Ionic y similares) para crear la interfaz de usuario.

Además, todas las solicitudes que llevan elementos de identificación / secretos (ID de sesión, token de actualización, etc.) deben realizarse a través de HTTPS , lo que evita que los observadores malintencionados conozcan sus valores.

El indicador HttpOnly marcado en su cookie solo evita que el valor se manipule a través de JavaScript. Por lo tanto, también debe agregar el indicador Secure a esas cookies, para evitar enviarlas a través de conexiones no cifradas.

Y, por favor, si usa conexiones encriptadas, no haga que acepte ningún certificado. Asegúrese de verificar correctamente la validez del certificado proporcionado por el servidor.

En lugar de deshabilitar la verificación o hacer que se devuelva "verdadero" para cualquier certificado, la solución segura para los certificados autofirmados es fijar la que usted generó o agregar la CA utilizada para crear su certificado a la lista de CA confiables.

Para ayudarlo más en su búsqueda de asegurar la comunicación de su aplicación móvil:

Documento OWASP que explica el establecimiento de certificados
Página que habla sobre los pros y los contras y que proporciona enlaces y un ejemplo
< a href="https://security.stackexchange.com/questions/29988/what-is-certificate-pinning"> pregunta de SE sobre el establecimiento de certificados

Editar :
Por lo que pude entender, este es un comportamiento incorrecto creado por la implementación del marco. Respuesta larga y breve: "Debería ser posible, pero arruinamos las cosas". Intenté desarrollar aplicaciones de prueba para phonegap, pero encontré errores (de implementación) como este que me hicieron rendirme y volver a mi Android nativo. Dicho esto, me gustaría que votara por favor mi respuesta de nuevo a cero, ya que debería ser correcta porque su aplicación no es nativa como usted dijo, pero desafortunadamente no fue capaz de resolver el problema debido a la forma de hacer las cosas de phonegap. / p>     

respondido por el DarkLighting 05.11.2014 - 13:50
fuente

Lea otras preguntas en las etiquetas