PHP - Problemas de login con hash

 
Vista:

Problemas de login con hash

Publicado por Jairo Acosta (4 intervenciones) el 11/11/2017 00:08:29
Hola. tengo un sistema de login que encripté con hash pero no logro que me lea las contraseñas encriptadas.

Este es el codigo que me encripta la contraseña, funcion correctamente.

1
2
3
4
5
6
7
8
Código PHP:
$a = $_POST['nombre'];
$b = $_POST['username'];
$c = $_POST['email'];
$d =password_hash($password, PASSWORD_DEFAULT, array("cost"=>12));
$e = $_POST['celphone'];
$f = $_POST['img_profile'];
$g = $_POST['tipo_usuario'];


Este es mi codigo de Login que no me funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
session_start();
?>
 
<?php
require_once("conec.php");
?>
<?php
 $contador=0;
if(isset($_SESSION["session_username"])){
// echo "Session is set"; // for testing purposes 
header("Location: index.php");
}
 
if(isset($_POST["login"])){
 
if(!empty($_POST['username']) && !empty($_POST['password'])) {
 $username=$_POST['username'];
 $password=$_POST['password'];
 
$query =mysql_query("SELECT * FROM login WHERE username='".$username."' AND password='".$password."'");
 
$numrows=mysql_num_rows($query);
 if($numrows!=0)
 
{
 $row=mysql_fetch_assoc($query);
 {
 
 $dbusername=$row['username'];
 $password=$row['password'];
 $dbnombre = $row['nombre'];
 $id = $row['cod_us'];
 $correo = $row['email'];
 $telefono = $row['celphone'];
 $tipo_usuario = $row['tipo_usuario'];
 $foto = $row['img_profile'];
 }
 
if($username == $dbusername && $password == $password)
 
{
 
 $_SESSION['session_username']=$username;
 $_SESSION['nombre_usuario'] = $dbnombre;
 $_SESSION['cod_us'] = $id;
 $_SESSION['email'] = $correo;
 $_SESSION['celphone'] = $telefono;
 $_SESSION['tipo_usuario'] = $tipo_usuario;
 $_SESSION['password'] = $password;
 $_SESSION['img_profile'] = $foto;
 
 
 
/* Redirect browser */
 header("Location: index.php");
 }
 } else {
 
$message = "Nombre de usuario ó contraseña invalida!";
 }
 
} else {
 $message = "Todos los campos son requeridos!";
}
 
}
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

Problemas de login con hash

Publicado por Jairo Acosta (4 intervenciones) el 11/11/2017 04:55:25
Amigo, ya lo lei pero sinceramente no logro implementarlo en mi codigo, el ejemplo ahi no es especifico, soy novato en hash y la verdad no sé exactamente como y donde debo poner el codigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de facundo

Problemas de login con hash

Publicado por facundo (185 intervenciones) el 11/11/2017 20:37:57
Como dijo gonzalo esta bien usar md5 tambien, aunque no conviene usarlo porque no es seguro

Te explico como funciona asi lo podes aplicar a tu proyecto en cuestion

agrega un form con un input text, con un name "password", y otro con name "usuario". Estos serian los campos en el que el usuario tiene que escribir su password

cuando toca submit lo lleva a comprobarLog.php

en esta pagina vas a agarrar el valor que el usuario ingresa, eso lo haces con
1
2
$nombre = $_POST['nombre'];
$passIngresado = $_POST['password'];

Ahora comprobas que el password ingresado por el usuario sea igual al hash que hay en la base de datos

Para eso haces la coneccion a la base de datos y seleccionas el hash de ese usuario, por ejemplo
1
$sql = "SELECT nombre,pass FROM usuarios WHERE `nombre` = $nombre";

Una vez ejecutada la consulta a la base de datos y con el hash guardado en una variable $hash, haces la comprobacion con password_verify(),

lo que hace comprueba que el hash que tiene guardado el usuario ese en la database, sea el hash de la contraseña que ingreso.

1
2
3
4
5
6
if (password_verify($pass,$hash)){
    echo 'el password es correcto';
}else{
echo 'pass incorrecto';
header('Location: index.php?err=1');
}

Fijate si lo podes probar cualquier cosa comenta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problemas de login con hash

Publicado por Jairo Acosta (4 intervenciones) el 11/11/2017 22:13:42
Hola, mira lo puse asi en este lugar, pero igual no funciona

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
if(isset($_SESSION["session_username"])){
// echo "Session is set"; // for testing purposes
header("Location: index.php");
}
 
if(isset($_POST["login"])){
 
if(!empty($_POST['username']) && !empty($_POST['password'])) {
 $username=$_POST['username'];
 $password=$_POST['password'];
 
if (password_verify($password,$hash)){
    echo 'el password es correcto';
}else{
echo 'pass incorrecto';
header('Location: index.php?err=1');
}
 
 
 
$query =mysql_query("SELECT * FROM loggeous WHERE username='".$username."' AND password='".$password."'");
 
$numrows=mysql_num_rows($query);
 if($numrows!=0)
 
{
 $row=mysql_fetch_assoc($query);
 {
 
 $dbusername=$row['username'];
 $password=$row['password'];
 $dbnombre = $row['nombre'];
 $id = $row['cod_us'];
 $correo = $row['email'];
 $telefono = $row['celphone'];
 $tipo_usuario = $row['tipo_usuario'];
 $foto = $row['img_profile'];
 }
 
if($username == $dbusername && $password == $password)
 
{
 
 $_SESSION['session_username']=$username;
 $_SESSION['nombre_usuario'] = $dbnombre;
 $_SESSION['cod_us'] = $id;
 $_SESSION['email'] = $correo;
 $_SESSION['celphone'] = $telefono;
 $_SESSION['tipo_usuario'] = $tipo_usuario;
 $_SESSION['password'] = $password;
 $_SESSION['img_profile'] = $foto;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problemas de login con hash

Publicado por gonzalo (615 intervenciones) el 12/11/2017 02:47:12
esta bueno el codigo, nomas ten en cuenta el sqlinyection.

a que te refieres conque no es seguro?

puedes decirme que dice aqui? 0b5ff0b1ee468894c17d2a0032572025

salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de facundo

Problemas de login con hash

Publicado por facundo (185 intervenciones) el 12/11/2017 18:46:06
Gonzalo, tengo entendido que md5 ya es obsoleto.
https://webcodedesigner.wordpress.com/2011/07/05/es-seguro-el-algoritmo-md5/
https://news.sophos.com/es-es/2017/01/27/algoritmo-md5-las-horas-contadas/


Jairo, para que funcione, en la database tiene que estar guardado el hash del password

Para eso lo haces con password_hash() , por ejemplo, si en el registro el usuario puso el password "123456" entonces seria
1
$hash = password_hash('123456', PASSWORD_DEFAULT);

hace var_dump($hash) para que puedas ver lo que se guarda en la variable $hash

Aunque claro en vez de 123456 ahi iria la variable en la que guardas el password ingresado por el usuario para su registro


Probalo y cualquier cosa comenta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problemas de login con hash

Publicado por gonzalo (615 intervenciones) el 13/11/2017 04:23:27
solo lei el primer articulo.

aqui me llama la atencion, no trae referencias, en mi opinion ese es mas un articulo de opinion que de demostracion, lo unico en lo que estoy de acuerdo es que el numero de posibles combinaciones es estratosferica y que los procesadores son cada vez mas rapidos.

hasta aqui ok, pero no dice que ya sea posible desencriptar un hash con md5, el cual por cierto no es el unico y no va a ser el ultimo.

asi que vamos por partes.

estoy de acuerdo en que md5 es obsoleto ya que debe haber mejores algoritmos, pero es inseguro?

si no es seguro entonces te pregunto, ya desencriptaste el md5 del post anterior?

al final entonces estamos de acuerdo en que no hay codigo de encriptacion seguro aqui incluyo el password_hash, entonces aqui estamos de acuerdo los 2 (espero).

md5 tiene solo 1 debilidad.

pero lo mismo va a pasar con cualquier metodo de encryptacion incluyendo el de 1024 bits. o sea, esa es la misma debilidad de el password_hash.

corrigeme si estoy mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problemas de login con hash

Publicado por gonzalo (615 intervenciones) el 11/11/2017 17:32:21
hash lo que hace es que destroza la cadena original, una vez aplicado el hash no hay manera de saber que contiene la cadena, bueno, si hay manera pero tardarías años en descifrarla.

la cadena resultante es unica, no se repite a menos que encriptes de nuevo la cadena original, solo asi te resultaran 2 cadenas iguales.

me explico.

jairo = ABCDE12345 (Ojo con la j minuscula)

Jairo=A1B2C3D4E5 (ojo con la J mayuscula)

la unica forma de obtener ABCDE12345 es aplicando Hash a jairo, con 1 letra que le cambies la cadena cambia.

asi que lo que debes hacer es

1 encriptar el password (original) y gardar el hash en la base de datos.

2 al procesar un login debes entonces encriptar el password que introdujeron en el logiin y compararlo contra el hash que guardaste en la base de datos, algo asi como $hashDeLogin=$hashOriginal

si los 2 son iguales entonces el password es correcto.

te recomiendo usar hash directo en lugar de hash_password.

$myHash=hash("md5",$Password,false);

puede ser md5 o cualquier otro dependiendo de que tan complicado quieres el hash.

pero bueno, la mejor opinion la tienes tu

otra cosa, hay manera de entrar a ver a las variables de session, asi que asegurate de encriptarlas tambien.

el diseño de las alas de las aves es lo que les permite volar, el area superior del ala es un poco mas corta que el area inferior, asi que el aire que pasa por arriba del ala tarda menos en pasar que el aire que pasa por debajo del ala, esta diferencia en la distancia es la que les permite volar y maniobrar, de otro modo necesitarían mucha velocidad para mantener el vuelo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar