elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  No guardar el email en texto plano en la base de datos y/o variables SESSION
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No guardar el email en texto plano en la base de datos y/o variables SESSION  (Leído 932 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.605


🏴 Libertad!!!!!


Ver Perfil WWW
No guardar el email en texto plano en la base de datos y/o variables SESSION
« en: 9 Enero 2020, 06:04 am »

Modo Paranoico ON

Post Original: https://albertobsd.dev/blog/es/2020/01/no-guardar-email-en-texto-plano/

Déjame repetirte el titulo

No guardar el email en texto plano en la base de datos, No se necesita, no se requiere, es mas seguro.

Según esta publicación (Lectura recomendada)

https://medium.com/@alex.birsan/the-bug-that-exposed-your-paypal-password-539fc2896da9

Bug bounty de 15mil $ USD

Si nos ponemos paranoicos, no deberías de conocer el email del usuario, No se necesita, no se requiere.

¿Que dato valido entonces? Un hash del mismo email protegido con alguna key, Importante: Que no sea reversible es decir que teniendo el hash no exista forma de volver al email y/o password originales.

Los siguientes códigos requieren de un archivo key_db.dat el cual se puede generar con dd leyendo de /dev/random o con el método que mas les guste.

Código
  1. /*
  2. metodo con hash_pbkdf2
  3. */
  4. $halgo = "sha256";
  5. $iterations = 2000000;
  6. $email = "user@example.com";
  7. $password = "P4ssw0rd";
  8. $salt = hash_file($halgo,"key_db.dat",true);
  9. $salida_email = hash_pbkdf2($halgo,$email,$salt,$iterations,0);
  10. $salida_password = hash_pbkdf2($halgo,$password,$salt,$iterations,0);
  11. echo "hash email: $salida_email\n";
  12. echo "hash password: $salida_password\n";
  13.  
  14.  
  15. /*
  16. metodo Iterativo con hash_hmac ()
  17. */
  18. $i = 0;
  19. $data_email = substr($email,0);
  20. $data_password = substr($password,0);
  21. do {
  22. $data_email = hash_hmac($halgo,$data_email,$salt,true);
  23. $data_password = hash_hmac($halgo,$data_password,$salt,true);
  24. }while($i++ < ($iterations - 1));
  25. $data_email = hash_hmac($halgo,$data_email,$salt,false);
  26. $data_password = hash_hmac($halgo,$data_password,$salt,false);
  27. echo "hash email: $data_email\n";
  28. echo "hash password: $data_password\n";
  29.  
  30. /*
  31. metodo Iterativo solo con hash  (data y key concatenadas)
  32. */
  33. $i = 0;
  34. $data_email = substr($email,0);
  35. $data_password = substr($password,0);
  36. do {
  37. $data_email = hash($halgo,$data_email.$salt,true);
  38. $data_password = hash($halgo,$data_password.$salt,true);
  39. }while($i++ < ($iterations - 1));
  40. $data_email = hash($halgo,$data_email.$salt,false);
  41. $data_password = hash($halgo,$data_password.$salt,false);
  42. echo "hash email: $data_email\n";
  43. echo "hash password: $data_password\n";
  44.  
  45.  

Nota que coloque Iteraciones igual a 2 Millones ya que no sabemos en un futuro que tan feasible sea realizar algun forcebrute a los hashes.

NO SE NECESITA GUARDAR EL EMAIL EN PLANO
- El usuario no se acuerda de su clave? Pides el email y aplicas el mismo algoritmo, se busca en la base de datos y si coincide con alguno de los hash envias el email, basándose en el email que te enviaron obviamente validando que sea email valido filter_var($email, FILTER_VALIDATE_EMAIL)

NO SE NECESITA, ok quieres enviarles noticias o mensajes cada X tiempo
- Se puede utilizar criptografía simétrica para guardar el email pero si te hackean la base de datos y el código fuente, lo van a poder obtener ellos mismos

déjame Repetírtelo una vez mas NO SE NECESITA GUARDAR EL EMAIL EN TEXTO PLANO

Incluso solo se necesita recibir el email en texto plano en 2 ocasiones, solo cuando se registra (Para validar que sea valido) y cuando quiere recuperar su password.

Para el login diario podrías recibir  solo un hash del mismo

var email = CryptoJS.SHA512($("#email").val()).toString().substring(1, 127);

Se le quitan 2 nibbles de los extremos al hash antes de ser enviado, por si se llega a interceptar en transito por algun exploit, no se pueda determinar al 100% cual es el email inicial

Se podría aplicar lo mismo al password (Muy recomendable asi tu nunca vez el password original del usuario)

Saludos!






« Última modificación: 10 Enero 2020, 00:01 am por AlbertoBSD » En línea

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
@XSStringManolo
<svg/onload=alert()>
Colaborador
***
Desconectado Desconectado

Mensajes: 2.279


Turn off the red ligth


Ver Perfil WWW
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #1 en: 9 Enero 2020, 06:33 am »

Quien sería el esperpento que dejó los tokens en el js? xDDD

A los .js no se les aplica cross origen --'

Si el toquen estubiera incluso en otro html no serviría para nada a un atacante porque no puede automatizar la obtención para la explotación remota. Y aún así podrían usar Ing Social para que algún incauto les pasase el token de "dinero gratis". xD

15.000$ Me parece muy poco para lo que implica un bug de estas características. Podrían planear un ataque masivo simultaneo y dejar en ridículo la seguridad e imagen de Paypal.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.605


🏴 Libertad!!!!!


Ver Perfil WWW
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #2 en: 9 Enero 2020, 06:57 am »

Algun desempleado en este momento.

Pero igual hay que analizar si el token estaba en el script, no creo que sea el único script que este de esa manera.

Y luego esta el hecho de que tienen que reimplementar todos las paginas que utilizen tokens.... 🤔🤔

Es tardado ademas, si ya estaban acostumbrados a trabajar de cierta forma, va a estar dificil que cambien de paradigma de un momento a otro.

Imaginate que mas guardan sin cifrar numeros de tarjetas, cuentas de banco..

Creo que voy a ir dando de baja mi cuenta de paypal.

Saludos
En línea

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.458



Ver Perfil
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #3 en: 9 Enero 2020, 14:27 pm »

me parece demasiado paranoico... el email es infomacion publica :s y a menos que sea un sitio "moralmente sensible" no hay razon para ocultarlo... a demas quieres almacenar info de tus usuarios, y si te dumpean la DB, los email son lo de menos preocupacion para ti
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.165


I'm fourth.


Ver Perfil WWW
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #4 en: 9 Enero 2020, 16:18 pm »

Bueno, "no se necesita" puede depender de lo que este pensado en hacer el sistema... Por ejemplo, si estoy subscrito al NYT por correo me imagino que ellos si necesitan mi correo :P.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.605


🏴 Libertad!!!!!


Ver Perfil WWW
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #5 en: 9 Enero 2020, 16:27 pm »

Por eso agrege lo de modo paranoico. 😅

Siendo honestos la mayoria de los sitios no nesecitan el email si solo quieren para un login se puede utilizar los metodos AOuth con twitter github google facebook y demas.

Analizemos si es para un blog -> Caja de comentarios a no ser que el usuario marque una casilla de que quiere hacer publico su email pues lo publicas y ya.

Pero realmente queremos poner esa opcion con tanto SPAM que llega para que quieres mas?

El detalle es el siguiente, si todo el mundo "developers" cifraran o hashearan bien los passwords no hay problema  el email puede estar en texto plano. Sin embargo no todos los developers lo hacen y a cada rato sale que dumpearon tal o cual base de datos, pueden reversear el password y probar la combinación email/password en todos los servicios conocidos. Como todo el mundo utiliza un password diferente en cada servicio No hay riesgo... 🙄🙄🙄

Si es paranoico pero es seguro a no ser que necesites estar mandando email a esas direcciones cada día entonces minimo que se guarde con un cifrado simetrico.

Asi si te dumpean la DB minimo el email no aparece en las listas tipo have i been pwned.

Bueno, "no se necesita" puede depender de lo que este pensado en hacer el sistema... Por ejemplo, si estoy subscrito al NYT por correo me imagino que ellos si necesitan mi correo :P.

Exacto si es para una lista de distribucion  donde no se guarde relacion con tu password esta muy bien.
En ese caso i podrias tener una tabla en modo paranoico para el login y otra tabla no relacionada para la lista de correo y si el usuario quiere darse de baja, que NO dependa de su login, sino de un token hash.

« Última modificación: 9 Enero 2020, 16:32 pm por AlbertoBSD » En línea

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
@XSStringManolo
<svg/onload=alert()>
Colaborador
***
Desconectado Desconectado

Mensajes: 2.279


Turn off the red ligth


Ver Perfil WWW
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #6 en: 9 Enero 2020, 16:40 pm »

Para cifrar programáticamente con simétrica, necesitas tener la clave simétrica almacenada para poder cifrar/descifrar.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.605


🏴 Libertad!!!!!


Ver Perfil WWW
Re: No guardar el email en texto plano en la base de datos y/o variables SESSION
« Respuesta #7 en: 9 Enero 2020, 16:48 pm »

Para cifrar programáticamente con simétrica, necesitas tener la clave simétrica almacenada para poder cifrar/descifrar.

Si pues, si ya te hackearon toda la base de datos y el sistema de archivos incluso el codigo fuente pues nada te va a salvar.

Por eso digo que no tendria que ser reversible.

En el código que puse hablo de una key en un archivo la cual si solo hackean la base de datos no van a obtener, en ese caso la key solo sirve como un padding/salt a la hora de hashear iterativamente.

Mi postura sigue siendo que no se guarde el email de forma reversible.

Saludos.
En línea

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Guardar comandos de consola DOS/CMD en texto plano, le falta desarrollo a MS...
Windows
Graphixx 0 3,885 Último mensaje 17 Mayo 2012, 08:55 am
por Graphixx
Problema con caracteres especiales al guardar archivo de texto plano
PHP
Crazy.sx 2 2,617 Último mensaje 27 Abril 2013, 06:12 am
por Crazy.sx
[Duda]Se puede usar archivo txt plano como Base de datos
Java
PabloPbl 9 7,345 Último mensaje 16 Diciembre 2014, 16:56 pm
por engel lex
BAse de datos en texto plano php
Desarrollo Web
matver 2 3,142 Último mensaje 4 Febrero 2018, 23:30 pm
por matver
SESSION y campo de base de datos
Bases de Datos
percentil101 1 345 Último mensaje 30 Agosto 2019, 16:55 pm
por bgnumis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines