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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Duda] Forma mas segura de intercambio de datos php - db
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Duda] Forma mas segura de intercambio de datos php - db  (Leído 3,303 veces)
cryp70n1c

Desconectado Desconectado

Mensajes: 17


MicroRed


Ver Perfil
[Duda] Forma mas segura de intercambio de datos php - db
« en: 30 Octubre 2016, 13:55 pm »



Bueno como mencioné en el título me preguntaba cual es la forma mas segura de transferir datos (nombre de usuarios, contraseñas y demás) desde la base de datos hacia el php y devuelta?

1) He leido que la mejor cifrado sería crypt y que MD5 ya sería totalmente insegura... Que opinan?
2) Usar las dos?
3) Si hay una forma mas segura cual sería?
3) Como se implementarían en este código?

P.s. Soy nuevo en php  :P

Código
  1. <?php
  2. try {
  3. $base = new PDO("mysql:host=-------; dbname=--------", "-------", "--------");
  4.  
  5. $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.  
  7. $sql="SELECT * FROM usuarios WHERE email= :email AND password= :password";
  8.  
  9. $resultado=$base->prepare($sql);
  10.  
  11. $email = htmlentities(addslashes($_POST["email"]));
  12.  
  13. $password = MD5(htmlentities(addslashes($_POST["password"])));
  14.  
  15. $resultado->bindValue(":email",$email);
  16.  
  17. $resultado->bindValue(":password",$password);
  18.  
  19. $resultado->execute();
  20.  
  21. $numero_registros = $resultado->rowCount();
  22.  
  23. if ($numero_registros != 0){
  24. $_SESSION["username"]= $email;
  25. header("location: perfil.php");
  26. }else {
  27. header("location:loginerror.php");
  28. }
  29. }catch (Exception $e){
  30. die("Error: ".$e->getMessage());
  31. }
  32. ?>
  33.  


En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: [Duda] Forma mas segura de intercambio de datos php - db
« Respuesta #1 en: 30 Octubre 2016, 17:20 pm »

Hola, si PHP y la base de datos los tienes en el mismo servidor no hay por qué preocuparse por el intercambio entre estos dos servicios ya que ambos se encuentran en el mismo equipo, otra cosa sería que estuviesen en distintos servidores.

Probablemente te refieras a la comunicación entre el cliente (el navegador del usuario) y el servidor. Actualmente no hay ninguna manera infalible, ya que se pueden robar los datos con una facilidad increible. Lo que hay que conseguir es que esos datos "secretos" estén cifrados de la mejor manera posible, pero desgraciadamente el que sepa va a poder saber lo que se envia.

Usa una libreria segura, como crypt o sha512 para hashear la contraseña, lo demás tambíen puedes hashearlo pero no suele hacerse.

No vale de nada hashear una contraseña en el servidor, ya que los datos ya han sido enviados en texto plano... Si, claro, para no guardarla tambien en texto plano, pero el daño ya está hecho. Aquí tienes una buena implementación en javascript de SHA.

Para protegerse de las tablas rainbow, podria saltearse el hash también en el cliente (y de nuevo en el servidor por si se roba y se usa para iniciar sesión), pero el problema sería de donde sacas el primer salt y como lo envias al servidor... Estaríamos en las mismas. Si a alguien se le ocurre como solucionar este problemilla que lo comparta.

En el cliente:
- Contraseña -> javascript -> SHA512 hash -> POST.

En el servidor:
- Generar random salt -> Saltear hash (hashear de nuevo el hash junto al salt).

Si necesias un ejemplo luego lo pongo.


En línea

bluff4value

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [Duda] Forma mas segura de intercambio de datos php - db
« Respuesta #2 en: 30 Octubre 2016, 18:01 pm »

Hola, si PHP y la base de datos los tienes en el mismo servidor no hay por qué preocuparse por el intercambio entre estos dos servicios ya que ambos se encuentran en el mismo equipo, otra cosa sería que estuviesen en distintos servidores.

Probablemente te refieras a la comunicación entre el cliente (el navegador del usuario) y el servidor. Actualmente no hay ninguna manera infalible, ya que se pueden robar los datos con una facilidad increible. Lo que hay que conseguir es que esos datos "secretos" estén cifrados de la mejor manera posible, pero desgraciadamente el que sepa va a poder saber lo que se envia.

Usa una libreria segura, como crypt o sha512 para hashear la contraseña, lo demás tambíen puedes hashearlo pero no suele hacerse.

No vale de nada hashear una contraseña en el servidor, ya que los datos ya han sido enviados en texto plano... Si, claro, para no guardarla tambien en texto plano, pero el daño ya está hecho. Aquí tienes una buena implementación en javascript de SHA.

Para protegerse de las tablas rainbow, podria saltearse el hash también en el cliente (y de nuevo en el servidor por si se roba y se usa para iniciar sesión), pero el problema sería de donde sacas el primer salt y como lo envias al servidor... Estaríamos en las mismas. Si a alguien se le ocurre como solucionar este problemilla que lo comparta.

En el cliente:
- Contraseña -> javascript -> SHA512 hash -> POST.

En el servidor:
- Generar random salt -> Saltear hash (hashear de nuevo el hash junto al salt).

Si necesias un ejemplo luego lo pongo.


Estoy de acuerdo en lo de usar sha512 o crypt pero en vez de general el has en el cliente mediante javascript si alguien esta en medio y te captura el hash podria conectarse a esa cuenta igualmente, para evitar esto yo creo que es mejor hacer todo sobre https de manera que ninguno de los datos ira sobre texto plano y ademas no tienes por que reazlizar el hash en el lado cliente y ademas se te cifra toda la conexion extremo a extremo por lo que me parece mejor alternativa.

Saludos
En línea

gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: [Duda] Forma mas segura de intercambio de datos php - db
« Respuesta #3 en: 30 Octubre 2016, 19:07 pm »

Si, eso ya lo he dicho yo. Esta más que claro que se puede robar la información de inicio de sesión, ya sea la contraseña en texto plano o el hash y con cualquiera de los dos iniciar sesión. Pero entre que roben la contraseña en texto plano o un hash, es mucho mejor que solo sea el hash, ya que aunque existen tablas donde "pueda" (no es 100% seguro) estar la contraseña en texto plano, hay menos riesgo de que quede expuesta la contraseña del usuario y se use para entrar en otras webs/servicios online (porque como ya sabemos la mayoria solemos usar la misma  :P).

De todas maneras, a mí personalmente, no me hace ninguna gracia que mi contraseña (o cuenta bancaria, etc) se envie en texto plano, aunque sea mediante una conexión cifrada usando TLS. ¿Por que? Muy sencillo:

1º TLS ni ningún predecesor será 100% seguro, siempre habrá alguna manera de romper el cifrado o engañar al sistema y no creo que haga falta mencionar ataques conocidos que aún se siguen usando.

Solo con eso ya hay razón más que suficiente como para no mandar información sensible en texto plano.

2º (y no menos importante) Mi contraseña o cualquier otro dato sensible, deben ser secreto incluso para la empresa que ofrece el servicio. ¿Quien te asegura que esos datos que llegan al servidor, no son guardados en texto plano antes de ser hasheados/cifrados? (¿Enserio nadie habia pensado en esto antes? Debe ser que tengo una mente retorcida :P)

Lo dicho, a mi personalmente no me hace ninguna gracia.

HTTPS no es una medida infalible, es simplemente una capa más de seguridad que debe usarse como refuerzo sobra la seguridad que ya hayas implementado.
En línea

bluff4value

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: [Duda] Forma mas segura de intercambio de datos php - db
« Respuesta #4 en: 31 Octubre 2016, 09:51 am »

Sisi en ese aspecto totalmente de acuerdo contigo, solo añadia que es recomendable añadir ese protocolo de seguridad. Y añadiendo ademas a lo tuyo de enviar el hash si utilizamos algun salt para las contraseñas todavia mejor.

Saludos
En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: [Duda] Forma mas segura de intercambio de datos php - db
« Respuesta #5 en: 31 Octubre 2016, 22:15 pm »


Estoy de acuerdo en lo de usar sha512 o crypt pero en vez de general el has en el cliente mediante javascript si alguien esta en medio y te captura el hash podria conectarse a esa cuenta igualmente, para evitar esto yo creo que es mejor hacer todo sobre https de manera que ninguno de los datos ira sobre texto plano y ademas no tienes por que reazlizar el hash en el lado cliente y ademas se te cifra toda la conexion extremo a extremo por lo que me parece mejor alternativa.

Saludos

https tampoco es el santo grial de la seguridad. Por ejemplo un atacante en LAN podría hacerte un MITM con sslStrip.

Lo mas seguro hoy en dia ( en mi humilde opinión) es JSON Web Tokens (jwt), donde todo el trafico cliente<->servidor es en formato json y esta cifrado. Tiene la ventaja de no necesitar https y además es mas escalable. El dia de mañana poder conectar un app de smartphone, desktop o lo que sea a esta API(servidor). JWT será el corazon del Internet de las Cosas (IoT) que viene a ser algo como la web 3.0 donde casi todo esta conectado a internet (autos, lavadoras, casas, heladeras, la ropa, etc).

https://jwt.io/
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eraser 6.0.8. Borra datos de forma segura con Eraser
Noticias
wolfbcn 0 3,090 Último mensaje 6 Noviembre 2010, 17:35 pm
por wolfbcn
[Duda] Tor de forma segura y eficiente. « 1 2 »
Redes
konarr 10 5,914 Último mensaje 23 Julio 2012, 23:27 pm
por konarr
Cómo eliminar los datos de un móvil de forma segura
Noticias
wolfbcn 0 1,456 Último mensaje 30 Mayo 2016, 15:43 pm
por wolfbcn
Orgía de datos: el intercambio de datos sin consentimiento de las apps de citas
Noticias
wolfbcn 0 1,593 Último mensaje 18 Junio 2017, 13:58 pm
por wolfbcn
Como puedo guardar los datos de forma segura del lado del cliente
Desarrollo Web
EladioRocha 1 2,111 Último mensaje 2 Diciembre 2018, 18:56 pm
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines