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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?  (Leído 9,062 veces)
Macky25

Desconectado Desconectado

Mensajes: 8



Ver Perfil
¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« en: 20 Agosto 2016, 22:36 pm »

Estoy creando un formulario de usuarios en PHP, pero algo que necesito es cifrar las contraseñas de los usuarios que se registren.

El md5 según foros es tremendamente malo para este trabajo (salvo que sean cantidades grandes de caracteres). El Sha1 si que es vulnerable (está decayendo en lo que refiere a seguridad). Y php no recomienda ni utilizarlos.

El hash de passwords de php es PASSWORD_DEFAULT, y PASSWORD_BCRYPT. Se encuentran el la misma página de PHP, pero no entiendo las indicaciones que señalan, son confusas. (http://php.net/manual/es/function.password-hash.php)

Necesito el código necesario para poder cifrar las contraseñas antes de generar una conexión con la base de datos y enviar el formulario. Además de el código para el 'Log In', de modo el cual la contraseña ingresada en el Log In pueda compararse con la contraseña ingresada en el registro desde el principio, y el usuario logearse dentro del sitio.

Estoy seguro que no es un código al que se deba crear, debe ser un código que muchos tienen o llevan en su sitio reservados para las contraseñas.

Gracias de antemano.  :)


En línea

Hola hacker, mi nueva cuenta está en: @360macky
dopr

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #1 en: 21 Agosto 2016, 02:42 am »

No habia escuchado que md5 fuera "malo", hasta donde yo sé actualmente es irrompible. Te recomiendo que al meter el valor del campo en una variable lo pases a md5 automáticamente con algo así:
Código:
$email = $_POST["email"]; /*Por ejemplo*/
$clave = md5($_POST["clave"]);

O si lo prefieres, cífralo en la misma consulta de mysql:
Código:
$email = $_POST["email"]; /*Por ejemplo*/
$clave = $_POST["clave"];

$consulta = "INSERT INTO ejemplo (email, clave) VALUES ('{$email}', '{md5($clave)}');

/*Las llaves {} las pongo por mania mia, no son necesarias,
sirven para que PHP sepa que lo que esta leyendo dentro de un string es una variable.*/

$enviar_consulta = conexion->query($consulta); /*Suponiendo que uses objetos para trabajar con la BBDD*/

Espero que te sea de ayuda :)


« Última modificación: 21 Agosto 2016, 03:25 am por dopr » En línea

High Hopes.
+ 1 Oculto(s)

Desconectado Desconectado

Mensajes: 298


un defecto se puede convertir en una virtud


Ver Perfil WWW
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #2 en: 21 Agosto 2016, 02:55 am »

ademas que  md5 no se puede revertir, es un metodo de hasheo y no de encriptacion, aunque con diccionario exahustivo creo que si se puede
En línea

dopr

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #3 en: 21 Agosto 2016, 03:23 am »

ademas que  md5 no se puede revertir, es un metodo de hasheo y no de encriptacion, aunque con diccionario exahustivo creo que si se puede

Se podrá siempre que se disponga de la contraseña original. Si nadie ha cifrado la contraseña y ha apuntado el hash en un diccionario es imposible de romper.  ;D
En línea

High Hopes.
gAb1


Desconectado Desconectado

Mensajes: 731


Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #4 en: 22 Agosto 2016, 16:14 pm »

No se trata de que sea irrompible o no. MD5 no se recomienda porque es rápido y por lo tanto un atacante podría comparar billones de hashes por segundo con una sola gpu...

Se podrá siempre que se disponga de la contraseña original. Si nadie ha cifrado la contraseña y ha apuntado el hash en un diccionario es imposible de romper.  ;D

MD5 is one way encryption, que significa que solo se puede cifrar y no descifrar. Romper no significa que se ha descifrado, si no que se ha encontrado una coincidencia. Como bien sabemos, se hashean contraseñas al azar y se guardan en diccionarios para luego comparar. A eso se le llama fuerza bruta (al igual que 0000, 0001, 0002...  ;D).

Dejo una guia actualizada para hashear las contraseñas, incluye como usar argon2: https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016#php
En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #5 en: 22 Agosto 2016, 18:50 pm »

Lo que se hace es aplicar el digest MD5 o SHA1 a la clave en plano mas un salt(sal en ingles).

El salt debe ser un valor constante en el sistema, por ejempo pongamos que es ""dddfD$#Fdewded".

Entonces deberias hacer: MD5(clave_plana + salt), por ejemplo en PHP:

Código
  1. define('SALT','dddfD$#Fdewded');
  2. $password = "1234561;"
  3. $secure = md5($password . SALT);

Asi, por ams que alguien tenga un diccionario con la clave plana, si no saben el SALT nunca podran hacer la reversion xD
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
Macky25

Desconectado Desconectado

Mensajes: 8



Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #6 en: 25 Agosto 2016, 22:52 pm »

Lo que se hace es aplicar el digest MD5 o SHA1 a la clave en plano mas un salt(sal en ingles).

El salt debe ser un valor constante en el sistema, por ejempo pongamos que es ""dddfD$#Fdewded".

Entonces deberias hacer: MD5(clave_plana + salt), por ejemplo en PHP:

Código
  1. define('SALT','dddfD$#Fdewded');
  2. $password = "1234561;"
  3. $secure = md5($password . SALT);

Asi, por ams que alguien tenga un diccionario con la clave plana, si no saben el SALT nunca podran hacer la reversion xD

Entonces creo que subestime al MD5  :o ,pero mejor usaré SHA1 con una salt.

¿Cómo pueda cifrar SHA1?
Imagino que será así

Código
  1. define('SALT','dddfD$#Fdewded');
  2. $password = "1234561;"
  3. $secure = SHA1($password . SALT);

Si estoy mal, por favor corrígeme.

¿Y de qué manera puedo solicitar desde PHP que se verifique es la contraseña ingresada es correcta en el Log In.?

Y muchas gracias por responder  :)
En línea

Hola hacker, mi nueva cuenta está en: @360macky
Macky25

Desconectado Desconectado

Mensajes: 8



Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #7 en: 25 Agosto 2016, 23:06 pm »

No habia escuchado que md5 fuera "malo", hasta donde yo sé actualmente es irrompible. Te recomiendo que al meter el valor del campo en una variable lo pases a md5 automáticamente con algo así:
Código:
$email = $_POST["email"]; /*Por ejemplo*/
$clave = md5($_POST["clave"]);

O si lo prefieres, cífralo en la misma consulta de mysql:
Código:
$email = $_POST["email"]; /*Por ejemplo*/
$clave = $_POST["clave"];

$consulta = "INSERT INTO ejemplo (email, clave) VALUES ('{$email}', '{md5($clave)}');

/*Las llaves {} las pongo por mania mia, no son necesarias,
sirven para que PHP sepa que lo que esta leyendo dentro de un string es una variable.*/

$enviar_consulta = conexion->query($consulta); /*Suponiendo que uses objetos para trabajar con la BBDD*/

Espero que te sea de ayuda :)

Aproximadamente hace un mes generé unas contraseñas en un registro el cual no se conectaba con una base de datos sino con un archivo php (es decir, en vez de utilizar una base de datos todo era almacenado en un archivo php  :silbar:
Luego de registrar dos usuarios con la contraseña '12345', se me dió por seguridad buscar los números cifrados de MD5 en Google y varios sitios web si los descifraban. Estoy seguro que '12345' estaba de por sí en varios diccionarios. Pero al ver en sitios web el código descifrado me asusté mucho por lo tan vulnerable que podía llegar a comprometerse las contraseñas que se ingresen y como afectarían a los usuarios.

De igual manera creo que le añadiré un captcha sencillo en el registro. También quisiera añadirlo al Log In, pero sería molesto llenar ese captcha en cada ingreso  ;D

He escuchado del parámetro 'cost' que a propósito demora la carga ante ataques de fuerza bruta. ¿Es recomendable usar el cost?

 :rolleyes: Muchas gracias por responder  ;)
En línea

Hola hacker, mi nueva cuenta está en: @360macky
dopr

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #8 en: 25 Agosto 2016, 23:30 pm »

Aproximadamente hace un mes generé unas contraseñas en un registro el cual no se conectaba con una base de datos sino con un archivo php (es decir, en vez de utilizar una base de datos todo era almacenado en un archivo php  :silbar:
Luego de registrar dos usuarios con la contraseña '12345', se me dió por seguridad buscar los números cifrados de MD5 en Google y varios sitios web si los descifraban. Estoy seguro que '12345' estaba de por sí en varios diccionarios. Pero al ver en sitios web el código descifrado me asusté mucho por lo tan vulnerable que podía llegar a comprometerse las contraseñas que se ingresen y como afectarían a los usuarios.

De igual manera creo que le añadiré un captcha sencillo en el registro. También quisiera añadirlo al Log In, pero sería molesto llenar ese captcha en cada ingreso  ;D

He escuchado del parámetro 'cost' que a propósito demora la carga ante ataques de fuerza bruta. ¿Es recomendable usar el cost?

 :rolleyes: Muchas gracias por responder  ;)

A ver, 12345 está en todos los diccionarios porque es una contraseña ridícula, pero no confundas la seguridad de una contraseña con la de MD5, aparte que como dice unsigned lo que se hace es un digest.
Por otro lado lo del captcha es simplemente para que no se registren robots, nada que ver con la seguridad de las contraseñas.
Ante ataques de fuerza bruta lo que se hace es poner un límite de intentos en un cierto tiempo.
« Última modificación: 26 Agosto 2016, 14:23 pm por dopr » En línea

High Hopes.
Macky25

Desconectado Desconectado

Mensajes: 8



Ver Perfil
Re: ¿Cómo cifrar contraseñas antes de subirlas a MySQL en PHP?
« Respuesta #9 en: 26 Agosto 2016, 00:54 am »

A ver, 12345 está en todos los diccionarios porque es una contraseña ridícula, pero no confundas la seguridad de una contraseña con la de MD5, aparte que como dice nsigned lo que se hace es un digest.
Por otro lado lo del captcha es simplemente para que no se registren robots, nada que ver con la seguridad de las contraseñas.
Ante ataques de fuerza bruta lo que se hace es poner un límite de intentos en un cierto tiempo.

Solo probaba con las contraseñas y viendo este artículo http://www.bbc.com/mundo/noticias/2015/01/150121_tecnologia_peores_constrasenas_2014_lv, es la tercera peor contraseña que se pueda ingresar.

Encontré un código en un archivo de un script, e intentaré implementarlo en el registro. Contiene unas variables para 'desechar' o 'no permitir' ingresar contraseñas fáciles (contiene palabras muy comunes y números fáciles de aprender). Lo cual creo que sería  otra protección adicional al 'cost'.
En línea

Hola hacker, mi nueva cuenta está en: @360macky
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cifrar contraseñas?
Scripting
RedKnight 4 3,998 Último mensaje 29 Mayo 2009, 00:47 am
por Darioxhcx
Como cifrar contraseñas con SHA-1 en PHP???
Criptografía
shamaka 6 12,059 Último mensaje 7 Diciembre 2010, 18:20 pm
por shamaka
Ransomware roba contraseñas antes de 'secuestrar' archivos en Windows
Noticias
wolfbcn 0 11,599 Último mensaje 4 Diciembre 2015, 22:15 pm
por wolfbcn
Cómo hacer fotos 3D para subirlas a Facebook: Te explicamos el proceso y lo ...
Noticias
wolfbcn 0 1,709 Último mensaje 13 Noviembre 2018, 01:34 am
por wolfbcn
Cifrar contraseñas en phpMyAdmin
Desarrollo Web
Ahinoam 3 2,899 Último mensaje 3 Noviembre 2019, 20:07 pm
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines