Mejorar Seguridad de mi sistema

Iniciado por BerinGer, 27 Mayo 2011, 18:35 PM

0 Miembros y 1 Visitante están viendo este tema.

BerinGer

Hola, estoy haciendo un codigo de seguridad para un sistema que estoy armando así que me gustaría que me ayuden a mejorarlo por eso lo subí a mi hosting y así lo pueden probar les pido por favor que me digan si encuentran un fallo o alguna manera de mejorar el código, ya que seria de gran ayuda para mi y me serviría para mejorar mis conocimiento en php que recién estoy empezando  :) , desde ya gracias.

http://maximilianogarro.com.ar/

El código en cuestión:
fns_login.php
Código (php) [Seleccionar]
//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; }
            }
           
    }

//cifrar con contraseña
    function cifrar($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) [Seleccionar]
    //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'];
           
            //ciframos password con sha1 y contraseña
            $passsafe = cifrar($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'];
                           
                            //ciframos un key unico de usuario
                            $key = cifrar($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) [Seleccionar]
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
Solo Se Que No Se Nada"

"Yo solo te muestro la puerta, tú eres quien debe
decidir cruzarla"
[/color]