Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 13/05/15, 20:34:53
Avatar de volldammBilbo
volldammBilbo volldammBilbo no está en línea
Usuario poco activo
Mensajes: 3
 
Fecha de registro: may 2015
Localización: Bilbao
Mensajes: 3
Modelo de smartphone: Xperia Z
Tu operador: Euskaltel Móvil
Mencionado: 0 comentarios
Tagged: 0 hilos
Contraseña de usuario

Hola a tod@s,

estoy realizando mi primera aplicación en Android y tengo un problema con el tema 'Usuario y contraseña'.

La aplicación tiene parte de servidor, que es el que se encarga de persistir en una bd MySQL. Mi pregunta es, ¿como gestiono el tema contraseña? traducido a varias preguntas:

1. Es correcto guardar una contraseña (encriptada de alguna forma obviamente) en la BD?
2. Como guardo la contraseña en el teléfono para que no tenga que logearse cada vez el usuario?

Gracias a tod@s!
Responder Con Cita


  #2  
Viejo 13/05/15, 21:25:30
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Lo habitual es usar un sistema de Access token, es decir, haces un sistema que al logearte te de una cadena de caracteres que identifique al usuario, y que sea válida durante un tiempo (por ejemplo 1 semana o 1 mes), esto se llama Token de Sesión.

Además del Token de Sesión también le envías al usuario un Refresh Token (o Token de Renovación), que se usa para renovar el Token de Sesión cuando este ha caducado.

Por ejemplo, te logeas, y al usuario le envías:

AccessToken = "aaaa"
RefreshToken = "bbbb"

A partir de ese momento para todo el tráfico con el servidor usas el AccessToken en vez del usuario y contraseña, ya que ese AccessToken identifica un login válido.

Cuando el AccessToken caduca vuelves a relogearte, pero en vez de usando el usuario y contraseña usando el AccessToken y el RefreshToken y al usuario le envías:

AccessToken = "cccc"
RefreshToken = "dddd"

Haciendo esto lo único que tienes que tener almacenado en tu app en todo momento es el AccessToken y el RefreshToken.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 13/05/15, 21:41:06
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Respecto al 2, busca y encontrarás: http://www.htcmania.com/showthread.php?t=952584 (EDITO: es lo que comentaba kriogeN )

Respecto a almacenar la contraseña en el servidor, no es la práctica habitual, y de hecho es pecado guardarla en claro aunque muchos lo hagan. Tampoco se almacena cifrada, lo que se almacena es un "hash" de la contraseña. Un hash es una función que a la misma entrada devuelve siempre la misma salida, pero conociendo la salida es imposible averiguar la entrada salvo probando distintas entradas (fuerza bruta, diccionarios, etc.) a ver si coincide la salida. Ejemplos, MD5 o SHA-1

Así, envías las credenciales al servidor (sea la contraseña, o el token, o lo que sea que pruebe que es el usuario), el servidor hace el hash y comprueba si en la base de datos es lo mismo. Si te atacan la base de datos, las credenciales no quedan expuestas como si estuvieran guardadas en texto plano o cifradas -si consiguieran a clave de cifrado podrían acceder a todas las contraseñas-

P.D: Poniéndose en modo paranoico (esto ya por si le interesa a alguien ), si quieres minimizar un posible ataque de robo de credenciales supuesto que accedan a la base de datos, lo ideal es hacer más difícil el uso de métodos de fuerza bruta. En ese caso, se hace un hash pero no solo de la contraseña sino de una clave secreta (del servidor), la contraseña del usuario y una ristra aleatoria de bytes (que se llama "salt" y que está asociada a ese usuario para evitar que los ataques sobre un usuario puedan valer para los demás). Y a todo eso le vuelves a aplicar la función de hash varias veces (iteraciones). Los frameworks de aplicaciones que incluyen componentes de seguridad hacen eso.
Responder Con Cita
Gracias de parte de:
  #4  
Viejo 14/05/15, 08:59:00
Avatar de volldammBilbo
volldammBilbo volldammBilbo no está en línea
Usuario poco activo
Mensajes: 3
 
Fecha de registro: may 2015
Localización: Bilbao
Mensajes: 3
Modelo de smartphone: Xperia Z
Tu operador: Euskaltel Móvil
Mencionado: 0 comentarios
Tagged: 0 hilos
Gracias por vuestras respuestas.

Algo había leído sobre lo que comentáis, tanto sobre los tokens como sobre lo de MD5 o SHA1 (a esto me refería con lo de cifrada).

A ver si me ha quedado claro. Guardar el hash en MySQL también es pecado o no tanto?

Entiendo que lo ideal es lo de los tokens pero lo veo más complicado para una primera aproximación (también es un poco de pereza, vamos a reconocerlo), lo pongo como futura mejora

Un saludo
Responder Con Cita
  #5  
Viejo 14/05/15, 13:08:22
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Guardar el hash en la base de datos es lo correcto. Guardarla en claro o cifrada no.

Edit: La pereza en temas de seguridad hay que guardarla. No por tu app, que al fin y al cabo puedes no tener nada comprometedor, pero ya sabemos que mucha gente usa la misma contraseña para todo. Si le pides email y contraseña y luego la mandas en claro o la almacenas... igual le haces la pascua al usuario si alguien intercepta el tráfico de tu app o accede a la base de datos.

Última edición por mocelet Día 14/05/15 a las 13:19:52
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 03:00:20 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007