Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/04/2012, 01:27
el_cos
 
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.