Autor Tema: LOGIN SEGURO EN PHP  (Leído 12264 veces)

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

oscar

  • Mensajes: 5
  • Liked: 0
  • Ahora¡¡¡
LOGIN SEGURO EN PHP
« : agosto 31, 2007, 07:40:52 pm »
HOLA AMIGOS HE ESTADO TRABAJANDO EN UN CODIGO DE LOGIN EN PHP PARA INICIAR SESION SEGURA
ME GUSTARIA SI ME PUEDEN AYUDAR A REVISARLO, PROBARLO Y MEJORARLO INCLUYO EL CODIGO DE
CONECTA.PHP Y SEGURIDAD.PHP Y EL CODIGO QUE GENERA LA IMAGEN DE COMPROBACION ESTILO PHPNUKE

se que se puede mejorar bastante........
********************************************************************************
LOGP.PHP


include("libcom/conecta.php");
include("libcom/seguridad.php");


$user=$_POST["user"];  //ALMACENA EL CONTENIDO DE $_POST
$passw=$_POST["pass"];
$tunumero=$_POST["code"];
$minumero=base64_decode($HTTP_COOKIE_VARS["key"]); //decodifica el key del image.php
$link=linkme();


$user=decode($user); // decode(); retira de la cadena los caracteres "'",'\\','<','>',"\"" para el sqlinjection
$passw=decode($passw);
addslashes($user); //
if($user!=""){
   $query=mysql_query("select PASS from users where UNAME like '$user'", $link );
   while($result=mysql_fetch_array($query))
   {
   $md5hash=$result;
   }mysql_free_result($query);
   
   if(is_array($md5hash)==true)
      {
      if(strcmp(array_pop($md5hash),md5($passw))!=0)
         {
         header("Location: index.php?invalid=1");
         }else
            {
            $SQL="select PERFIL from users where UNAME like '$user' ";       
            $perfil=mysql_query($SQL, $link );      
                              
            while($sdata=mysql_fetch_array($perfil)){
            $nivel=$sdata["PERFIL"];
            }mysql_free_result($perfil);


            session_start();
            $_SESSION["conectado"] = "si";
            $_SESSION["perfil"] = $nivel;
            $_SESSION["unamer"] = $user;
            

            $coin=strcmp($tunumero,$minumero);
            if($coin!=0)
               {
                  header("Location: index.php?invalid=2");
               }   
               else{
                  
                  
                  header("Location: modules/accounts/account.php");
                  }


            }
      }else
         {
         header("Location: index.php?invalid=1");
         }
   }else{
      header("Location: index.php?invalid=1");
      }
   ?>

************************************************************************************
CONECTA.PHP

<?php
function linkme()
{
if (!($link=mysql_connect("localhost","root","159753fafa")))
{
echo "fallo";
exit();
}
if (!mysql_select_db("cactuxplus",$link))
{
echo "fallo";
exit();
}
return $link;
}
?>

*******************************************************************************
SEGURIDAD.PHP

<?php
/* BIBLIOTECA COMUN CON FUNCIONES Y PARAMETROS DE SEGURIDAD
*/

function privado(){   //mantener privado el contenido para usuarios que no han iniciado sesion
session_start();
if($_SESSION["conectado"] != "si")
   {
   header("Location: http://localhost/cactuxplus/");
   exit();
   }else{
   define('MODULE_FILE', true);
   }
}




function decode($string) //quitar caracteres especiales para evitar sqlinjection
{
    $nopermitidos = array("'",'\\','<','>',"\"","-","%");
    $string = str_replace($nopermitidos, "", $string);
    return $string;
}     



if($salir==1){ //cerrar sesion
session_start();
$_SESSION["conectado"]="no";
session_destroy();
header("Location: http://localhost/cactuxplus/");
}




?>

*************************************************************************
IMAGEN.PHP

<?php

   /*
      
      El número está encryptado en Base64.
      Ejemplo:
         Para el número 1542, $key valdría: MTU0Mg==
         
      Obtener números usando funciones de Base64:
         Para codificar: base64_encode()
         Para decodificar: base64_decode()
         
      Uso del script:
         <img src="imagen.php?key=MTU0Mg==">
         
         o bien:
         
         http://localhost/imagen.php?key=MTU0Mg==
         
         Siendo "imagen.php" es script contendor del código citado en este archivo.
         
      Dudas?
         -> http://www.php.net/manual/es/ref.image.php
         -> http://www.php.net/manual/es/function.base64-encode.php
         -> http://www.php.net/manual/es/function.base64-decode.php
         -> http://www.php.net/manual/es/function.header.php*/
   
   if(!isset($_GET['key'])) { $n=rand(1000,9999); } else { $n = base64_decode($_GET['key']); }
   
   // Se establece el cabecero del documento, en este ejemplo será del tipo Imagen GIF
   // Nota: El archivo GIF tiene mejor compresión ;)
   
   // Se genera el área del gráfico
   $grafico = imagecreate(70, 30);
   // El primer color establecido será el color de fondo
   $fondo = imagecolorallocate($grafico, 0, 0, 0);
   // El siguiente color establecido será el color del texto
   $color = imagecolorallocate($grafico, 25, 125, 255);
   // Se establece el margen inicial para cada caracter escrito
   $margen = 5;
   // Se obtiene cada caracter de la cadena usando el loop for()
   for($x = 0; $x < strlen($n); $x++) {
      // Se extrae la cadena usando la función substr()
      $c = substr($n,$x,1);
      // La inclinación será 10 o -10 segun sea si el número de caracter es par o no
      if(($x % 2)==0) { $rend = 10; } else { $rend = -10; }
      // Se escribe el caracter en el gráfico
      imagettftext($grafico, 16, $rend, $margen, 22, $color, 'ARIALNBI.TTF', $c);
      // Se incrementa el margen del siguiente caracter a escribir, en caso de existir
      $margen += 16;
      $numx=$numx.$c;
      
   }
   $num64=base64_encode($numx); //codifica para guardar en cookie
   setcookie("key",$num64,time()+30);
   
    header('Content-Type: image/gif');
   // Se obtiene el gráfico para mostrar en el navegador
   imagegif($grafico);
   
   
   // Destruye la imagen creada liberando la memoria
   imagedestroy($grafico);
   
   
   
?>
Cual es la razon de tu existir, que te hace despertar cada mañana; hacia donde se dirige tu vida.....

Crypkey

  • *
  • Mensajes: 38
  • Liked: 1
  • ;)
Re: LOGIN SEGURO EN PHP
« Respuesta #1 : septiembre 02, 2007, 07:33:10 pm »
No esta nada mal el code, pero te sugiero que metas un ip_checker..  esto es meter cuando hagas la session meter a la db info esencial (ip, session hash etc.. ) para hacer un chequeo de cualquier hijack de la cuenta...

Saludos.