El código en cuestión:
fns_login.php
Código PHP :
//Reporte de error function error($error){ setcookie("reporte",$error,time()+180,"/",""); header("Location: ../index.php"); exit; } //Conectamos a la base de datos function db_login(){ //Conectamos a la db $host = '------'; $userdb = '------'; $passdb = '------'; $db = '------'; $connect = @mysql_connect($host,$userdb,$passdb); if($connect === false){ return false; error("Error: No se a podido conectar a la base de datos."); }else{ //Si se conecto seleccionamos la db $selectdb = @mysql_select_db($db,$connect); if($selectdb === false){ return false; die('Error: No se a podido conectar con la base de datos.'); }else{ return true; } } } //Encriptar con contraseña function Encriptar($pass){ $passsafe = hash_hmac('sha1', $pass, '_?¿·¨^*ç"$"1@ª!"·¿?·¡523ç´MaXi´Ç¨ç{}'); return $passsafe; } //Verifica si esta logeado. function firewall(){ //verificamos que existan las cookies if ( isset($_COOKIE['sistema']) && isset($_COOKIE['sistema2'])) { //Inicializamos VariablesS $key = $_COOKIE['sistema']; $userid = $_COOKIE['sistema2']; //Conectamos ala db $connect = db_login(); //Si la selecciono procedemos con la consulta if ($connect === true){ $loginquery = sprintf("SELECT * FROM `usuarios_sess`,`usuarios_log` WHERE `usuarios_sess`.`fkusuario`= '%s' AND `usuarios_log`.`pkusuario_log` = `usuarios_sess`.`fkusuario_log`;", mysql_real_escape_string($userid)); $login = @mysql_query($loginquery); if (($login === false) || (mysql_num_rows($login) != 1)){ error("Error: Intente nuevamente."); }else{ $usuariodb = mysql_fetch_array($login); $keydb = $usuariodb['KEY']; $ip = $usuariodb['ip']; //Comparamos Key e IP para evitar que nos roben la cookie :D if ($keydb != $key || $ip != $_SERVER['REMOTE_ADDR']) { error("Error: Debe logear para ver esta pagina."); } } mysql_close(); } }else{ header("Location: index.php"); } }
login.php
Código PHP :
//Iniciamos Session session_start(); //Incluimos funciones include_once('fns_login.php'); //Validamos que las variables del captcha existan if (!isset($_POST['key']) || !isset($_SESSION['CAPTCHA'])){ error("Error: Intenta acceder a este sitio de una forma incorrecta."); }else{ //Validamos que las varibles encriptadas sean iguales if(md5($_POST['key']) != $_SESSION['CAPTCHA']){ error("Error: Nos has introducido el codigo correcto."); }else{ //Destruismos variables captcha unset($_SESSION['CAPTCHA']); unset($_POST['key']); session_destroy; //validamos variables $user = $_POST['user']; $pass = $_POST['pass']; //Encriptamos password con sha1 y contraseña $passsafe = Encriptar($pass); if (!isset($user) && (ereg("^[a-zA-Z0-9]$", $user)=== false) && (strlen($user)> 50)){ error("Error: Nombre de usuario invalido."); }else{ if (!isset($pass) && (ereg("^[a-zA-Z0-9]$", $pass)=== false) && (strlen($pass)> 20)){ error("Error: Contraseña con caracteres invalidos."); }else{ //Conectamos ala db $connect = db_login(); //Si la selecciono procedemos con la consulta if ($connect === false){ error("Error: No se pudo conectar con la base de datos."); }else{ //Si la selecciono procedemos con la consulta $loginquery = sprintf("SELECT `pkusuario` FROM `usuarios` WHERE `usuario`='%s' AND `password`='%s'", mysql_real_escape_string($user), mysql_real_escape_string($passsafe) ); $login = @mysql_query($loginquery); if (($login === false) || (mysql_num_rows($login) != 1)){ error("Error: El usuario no existe."); }else{ // Ya logio => obtenemos datos $usuariodb = mysql_fetch_array($login); $userid = $usuariodb['pkusuario']; $fecha = gmdate('Y-n-j H:i:s'); $ip = $_SERVER['REMOTE_ADDR']; $localhost = gethostbyaddr($ip); $navegador = $_SERVER['HTTP_USER_AGENT']; //encriptamos un key unico de usuario $key = Encriptar($ip.$fecha); //almacenamos logs por seguridad y consulta futura $logs = "INSERT INTO `usuarios_log` (`pkusuario_log` ,`fkusuario` ,`ip` ,`localhost` ,`navegador` ,`login` ,`logout`) VALUES ('null', '".$userid."', '".$ip."', '".$localhost."', '".$navegador."', '".$fecha."', '".$fecha."');"; $almacenalogs = @mysql_query($logs); $idlogs = mysql_insert_id(); //borramos si existia session @mysql_query("DELETE FROM `usuarios_sess` WHERE `fkusuario` = '".$userid."'"); //entonces alamacenamos los nuevos keys $keylogs = "INSERT INTO `usuarios_sess`(`KEY` ,`fkusuario` ,`fkusuario_log`) VALUES ('".$key."', '".$userid."', '".$idlogs."');"; $almacenakeylogs = @mysql_query($keylogs); if (($almacenalogs === false) && ($almacenakeylogs === false)){ error("Error: No se puede iniciar existe un error al conectar."); }else{ setcookie("sistema", $key, time()+3600,"/",""); setcookie("sistema2", $userid, time()+3600,"/",""); header("Location: ../web_segura.php"); mysql_close(); die; } } } } } } }
logout.php
Código PHP :
include_once('fns_login.php'); if ( isset($_COOKIE['sistema']) && isset($_COOKIE['sistema2'])){ $key = $_COOKIE['sistema']; $userid = $_COOKIE['sistema2']; setcookie("sistema", $key, time()-3600,"/",""); setcookie("sistema2", $userid, time()-3600,"/",""); $fecha = gmdate('Y-n-j H:i:s'); $connect = db_login(); //Si se conecto a la db if ($connect === true){ $logoutquery = sprintf("UPDATE `usuarios_log` SET `logout` = '".$fecha."' WHERE `pkusuario_log` = (SELECT `fkusuario_log` FROM `usuarios_sess` WHERE `fkusuario` = '%s' );" , mysql_real_escape_string($userid)); $logout = @mysql_query($logoutquery); $keysess = sprintf("DELETE FROM `usuarios_sess` WHERE `fkusuario` = '%s';", mysql_real_escape_string($userid)); $keyout = @mysql_query($keysess); mysql_close(); } if (!isset($_COOKIE['sistema']) || $keyout === true){ setcookie("reporte","Deslogeado Correctamente.",time()+180,"/",""); } header("Location: ../index.php"); }else{ header("Location: ../index.php"); }
Link de descarga del codigo:
http://www.4shared.com/file/_eUj3D8u/userlogin_by_beringer.html