Foros del Web » Programando para Internet » PHP »

Encriptación PHP MySQL

Estas en el tema de Encriptación PHP MySQL en el foro de PHP en Foros del Web. Hola a tod@s. Hace poco que me registré y ésta es la primera vez que creo un tema. Espero explicarme lo mejor posible Estoy haciendo ...
  #1 (permalink)  
Antiguo 03/04/2012, 01:27
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 7 meses
Puntos: 1
Pregunta Encriptación PHP MySQL

Hola a tod@s. Hace poco que me registré y ésta es la primera vez que creo un tema. Espero explicarme lo mejor posible

Estoy haciendo un programa en PHP que requiere identificación de usuarios para poder acceder al contenido. Para ello, hice una base de datos con información sobre los administradores (que podrán ser de dos tipos, aunque de momento sólo tengo pensado lo que podrá hacer el superadministrador).

No tengo ningún problema con el registro, en general, de los usuarios. Sin embargo, ayer estuve implementando medidas de seguridad a la aplicación, y no fui capaz de encriptar la contraseña.

Estuve leyendo bastante, tanto en foros como incluso documentación oficial sobre funciones como crypt(), md5(), etc. Sin embargo, mi duda es: esas funciones son de un único sentido, y soy capaz de encriptar, y meter el dato encriptado en la base de datos, pero, ¿cómo haría para ver si casan los resultados? Porque, además, con md5() al menos, cada vez se genera un resultado distinto...

Ésta es la parte del código donde necesitaría encriptar:

--------------------------------------------------------------------------------------------------------
<?PHP
require_once('web_2.0_connexiones/web_2.0_connexion_file.php');

// Iniciamos la sesión
session_start();

// Si se ha enviado el formulario:
if (isset($_REQUEST['boton'])){

$user = GetSQLValueString($_REQUEST['user'], 'text');
$key = GetSQLValueString($_REQUEST['key'], 'text');

$user = htmlspecialchars($user);
$key = htmlspecialchars($key);

$tipo_admin=$resultado['nivel'];

if (!ctype_alnum($user) || !ctype_alnum($key)){
echo "<p align='center'>
Sólo se permiten caracteres de la A a la Z (mayúsculas o minúsculas) o números del 0 al 9 </p>";
}
}

// A continuación vemos si puso algo en el usuario y contraseña:

if (isset($user) && isset($key)){

mysql_select_db ($database_conexion, $conexion);

/* Encripto las claves de usuario. Para ello, obtengo el hash,
dejando que el salt sea generado automáticamente */

$instruccion=sprintf("SELECT administrators_id_admin, administrators_user, administrators_key, administrators_nivel
FROM `web_2.0_administradores_table`
WHERE administrators_user = ".GetSQLValueString($_REQUEST['user'], 'text')."and
administrators_key = ".GetSQLValueString($_REQUEST['user'], 'text'));

$consulta = mysql_query ($instruccion, $conexion)
or die ('Fallo en la consulta');

// Miramos el número de filas de la tabla:
$nfilas = mysql_num_rows ($consulta);

// Si los datos introducidos son correctos
if ($nfilas > 0)
{
$superadmin = $user;

// Como register_globals está en Off:
$_SESSION["superadmin"]=$user;

for ($i=0; $i<$nfilas; $i++)
{
$resultado = mysql_fetch_array ($consulta);
$nivel = $resultado['administrators_nivel'];
}

// Cerramos la conexión:
mysql_close ($conexion);
}
}

// Si la sesión está iniciada
if (isset ($_SESSION['superadmin'])){
header ('location: web_2.0_admin_panel/web_2.0_admin_panel_file.php?admin='.$nivel.'');
}

elseif (isset($user)){
print ("<P ALIGN='CENTER'> Acceso no autorizado </P>\n");
print ("<P ALIGN='CENTER'>[ <A HREF='web_2.0_admin_istration_file.php'> Volver a conectar </A> ]</P>\n");
}

// Si el intento de entrada es fallido:

/* Transformamos el nombre y la contraseña, con la función htmlspecialchars, para
impedir que se interpreten los caracteres especiales de HTML (<, >, &).*/


else{
?>
<div id="centro">
<form class='entrada' name='inicio' action='web_2.0_admin_istration_file.php' method='post'>
<p align=center> Usuario: <input type='text' name='user' size='20'/> </p>
<p align=center> Contraseña: <input type='password' name='key' size='20'/></p>
<p align=center> <input type='submit' name='boton' value='Entrar'/> </p>
</form>
</div>
<?php
}
?>

--------------------------------------------------------------------------------------------------------

Hubo algún ejemplo que encontré ayer, y que no fui capaz de entender del todo, en el que el usuario se registraba la primera vez para entrar en la aplicación. Aquí se trata de que, al menos para el caso de los superadministradores, no se puedan registrar, sino que quería que estén predefinidos en la base de datos simplemente.

¿Cómo puedo hacerlo?, ¿qué tengo que poner en el código, pero sobre todo, en la base de datos? (considero que ése es mi principal problema). Os pongo dos enlaces con pantallazos de como está mi tabla de la base de datos que uso para las autentificacion:

1) Modo examinar: http://www.subirimagenes.com/otros-fadfbafgaf-7588788.html

2) Modo estructura: www.subirimagenes.com/otros-fadfgsafaffa-7588789.html

Muchas gracias por adelantado.
  #2 (permalink)  
Antiguo 03/04/2012, 07:22
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Encriptación PHP MySQL

MD5 es un HASH que es un algoritmo de cifrado unidereccional no reversible, el cual NO encripta, son términos completamente diferentes.

el objeto del HASH es proteger data sensible y también para verificación de trasferencia de datos, es ampliamente recomendado para almacenar contraseñas.

lo único que debes hacer en el login es comparar los hashes, para ello hasheando el pass introducido por el usuario comparándolo con el agregado en la DB
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 03/04/2012, 08:58
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Encriptación PHP MySQL

Vale, ya me funcionó.

¡Muchas gracias! :D

Lo único que hice fue, en la SELECT de mi código, ponerle que administrators_key sea = md5($key), y luego, en phpmyadmin puse la función md5, y la contraseña.

Ahora que está solucionado, ¿tengo que marcar en algún lado que está solucionado? Es que, como es la primera vez que escribo, pues no lo sé.

Ya me dirás. Gracias de nuevo. Seguro que nos cruzamos alguna vez en el foro ;)
  #4 (permalink)  
Antiguo 03/04/2012, 09:06
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Encriptación PHP MySQL

Aunque sigo dándole vueltas, y aún tengo otra pregunta, xD.

Es que leo por ahí que ya no es del todo seguro usar MD5() ni SHA1(), y acabo de ver, buscando en la red, que alguien recomendaba usarlo dos veces, es decir md5(md5($key)).

Eso lo puedo hacer sin problemas en el código de PHP, pero en el phpmyadmin no veo la posibilidad de establecer dos veces la función, ¿sabes si se puede? Eso le daría a la aplicación bastante más seguridad, desde luego.

Graciaaaas.
  #5 (permalink)  
Antiguo 03/04/2012, 09:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Encriptación PHP MySQL

No, desde PHPMyAdmin no puedes hacer md5() dos veces, tendrías que crear el query manualmente (un INSERT) y poner dos veces el MD5 al rededor de la variable que quieras.

Saludos.
  #6 (permalink)  
Antiguo 03/04/2012, 09:30
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Encriptación PHP MySQL

Te recomiendo esta lectura para hacer mas seguro el uso de las funciones md5 y sha1.

http://phpsec.org/articles/2005/password-hashing.html

Tal como dice gatorV te toca insertar manualmente el valorsi lo deseas hacer asi como dices.
__________________
Blog de humor http://elcuasatar.net63.net/
  #7 (permalink)  
Antiguo 10/04/2012, 01:10
 
Fecha de Ingreso: marzo-2012
Ubicación: A Coruña
Mensajes: 29
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Encriptación PHP MySQL

OK. Gracias a los dos. De momento sigo avanzando con el diseño de mi aplicación, pero seguramente en el futuro me plantee obligar a que se creen usuarios a través de un formulario, y entonces hacer un doble md5(). Saludos.

Etiquetas: class, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:17.