Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/09/2003, 21:05
Jordi1
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
Bueno yaho creo que utiliza una encriptacion doble,
a ver si me se explicar, al llamar a la pagina se manda una
clave, que sea siempre diferente y aleatoria, creo que manda
un fecha con la funcion date mezcando el ella dia mes, minutos
segundos para que sea siempre diferente.

Recibes la clave encriptada md5 al abrir la pagina, luego con java script encriptas con md5 la contraseña del formulario y vuelves
a encriptar el resultado mas la clave que has recibido, ya cuando
recibes los datos a la pagina que procesa el formulario, solo tiens de comparar , la clave que te mando la pagina que la tienes
guardada en una sesion, mas la contraseña encriptada que
se supone la tienes guardada en la base de datos y lo encriptas
todo junto, de esta manera te da el mismo resultado que has
mandado.

Este sistema es casi imposible de que alguien pueda interceptar
tu contraseña pues envias cada vez algo diferente.

tienes la funcion md5 en java script en esta web http://pajhome.org.uk/crypt/md5/

Este ejemplo (que cogi la idea de una web, aunque no sabria decirte cual ) hace esto que te digo, en vez de sesiones utilizo
un archivo que guardo en la zona no navegable del servidor
aunque tb se puede utilizar sesiones , la idea es guardar la clave
que te manda el servidor para luego compararla.

tienes un archivo en la zona no navegable con la clave y la ruta
del archivo que se crea.

Código PHP:

<?
//clave
$sesion md5(date('d:G:g:s:I:w',time()))
//esta clave pones lo que quieras
$temp="ruta de los archivos que se crean en la zona no navegable"



//esto es el archivo login.php
function muestraForm() {

         global 
$temp,$sesion,$veces;
         
$ip=ip();
         
auto_delete();
         if(
file_exists($temp.$ip))
         {
            
$fa    implode("" file($temp.$ip));
            
$faa   explode("|",$fa);
            
$ses   trim($faa[0]);
            
$veces trim($faa[1]);
            
$tiempotime()+60*60;
/*en las variables $tiempo  puedes poner el tiempo que quieras, 
si tienes ip fija le pones mucho asi no tienes de logearte cada 
vez*/

        
}
       
         if(
$veces >=4error("<li> se ha intentado entrar mas de tres veces");
         
$tiempo=time()+60*60;
         
$veces++;
         
$fa = @fopen($fna $temp.$ip'w+');
         if (!
$faerror"<li> No se ha podido crear el archivo temp ");   
         
fwrite($fa"$sesion|$veces|0|$tiempo|$ip");
?>
<html>
<head>
<title>encriptar</title>
<!-- proporciona hex_md5 -->
<script src="md5.js"></script>
<script language="JavaScript">
function MakeIt()
{   

    var encript_a=hex_md5(document.formulario.contra.value);
    var encript_b=hex_md5(encript_a+"<? echo md5($sesion?>")
    var encript_u=hex_md5(document.formulario.usuario.value);

    document.formulario.usuario.value=encript_u;
    document.formulario.contra.value=encript_b;

}

</script>

<form onsubmit="MakeIt()" name="formulario" action="index.php?accion=auth" method="post" enctype="multipart/form-data" >
        <table width="40%" border="0" align="center" cellpadding="15" cellspacing="0" class="tabla1" >
          <tr align="center" bgcolor="#666699"> 
            <td colspan="2" height="30" class="peque2"><font color="#FFFFFF" size="3">AUTENTIFICACI&Oacute;N</font></td>
          </tr>
          <tr> 
            <td width="58%" height="70" align="right"><font size="-1">Nombre del 
              Usuario</font></td>
            <td width="42%" ><input name='usuario' type='text' class="entrada" size='25'></td>
          </tr>
          <tr> 
            <td height="59" align="right" ><font size="-1"></font><font size="-1">Contrase&ntilde;a 
              </font></td>
            <td><input name='contra'  type='password' class="entrada" size='25'></td>
          </tr>
          <tr> 
            <td colspan='2' align='center'> 
              <input  type='submit' class="entrada"  value='Login'>
            </td>
          </tr>
        </table>
      </form>
      </td>
  </tr>
  <tr> 
    <td valign="top"> <font size="-1">&nbsp;</font><br> <hr width="80%" noshade></td>
  </tr>
</table>
</body>
</html>
?>
<?
}
if(
$_GET["accion"]=="auth")
   {
    if(
autoriza($sesion))
       {
        echo 
"<META http-equiv=\"refresh\" content=\"0;url=index.php\">";
       }
     else 
muestraForm();
  }
else
    
muestraForm();

?>
aqui abajo la funciones que estan en archivo separado

Código PHP:
function autoriza()
{

       global 
$pass $temp$user;
       
        
$ip=ip();
         
$fa    implode("" file($temp.$ip));
         
$faa   explode("|",$fa); 
         
$tiempotime()+60*60;
         
$ses   $faa[0];
         
$veces $faa[1];
         
$t=md5($ses);
         
$contrasena=md5($pass.$t);
         
         if (
$_POST['contra']==$contrasena and $user==$_POST['usuario']) 
        {   
         
$fa = @fopen($fna $temp.$ip'w+');
         if (!
$faerror"<li> No se ha podido crear el archivo temp ");   
         
fwrite($fa"$ses|0|$user|$tiempo|$ip");
           return 
true;
        }
          else
          {
              unset(
$ses);
              return 
false;
          }
}

//y para ir borrando los  ficheros de ip esta funcion

function auto_delete()
{
     global 
$temp;
     
$i=0;     
     
$ip=ip();
      
$dir=opendir($temp);
      while(
$arch=readdir($dir)){
        if(
$arch=="." or $arch=="..")$arch="";
         else{ 
           
$i++ ;
           
$file=$temp.$arch;
           
$fichero[$i]=$file;
           
$inf=basename($fichero[$i]);
             if(
$inf==$ip)//miro si esta creado y cuanto tiempo lleva
             

                
$file=implode("" file($temp.$ip));
                
$control=explode("|",$file);
                if(
$control[3]<time())
                {
                   
unlink($temp.$ip);
                 }
//llave de if boorrado
              
}//llave de if de ip  
         
else
            {
//miro todos los archivos que esten al dia
            
$file=implode("" file($temp.$inf));
            
$control=explode("|",$file);
            if(
$control[3]<time())
            {
            
unlink($temp.$inf);
            }
//llave de if boorrado
       
}//llave de else de control archivos al dia
     
//llave de else 
   
}//llave de while 
   
closedir($dir);
}
//llave de funcion

//luego solo tienes de poner en la cabecera de cada pagina

entrada('login.php');// si no estas logueado te lleva al login


que esta es la funcion

function entrada($redirect)
{     
      global  
$temp $user;
      
$ip  ip();
      if(
file_exists($temp.$ip))
      {
        
$fa         implode("" file($temp.$ip));
        
$faa        explode("|",$fa);
        
$valid_user $faa[2];
        
$time       $faa[3];
        
$ip2        $faa[4];

        if (
$valid_user==$user and $time>time() and $ip2==$ip)
          return 
true;
          else echo 
"<META http-equiv=\"refresh\" content=\"0;url=$redirect\">";
      }
          else echo 
"<META http-equiv=\"refresh\" content=\"0;url=$redirect\">";

Este escript es una practica que hice, seguro que se puede
mejorar muchisimo y seguro que es mas facil hacerlo con sesiones
que con archivo.

Esta hecho con archivo para no tener de loguearse cada vez
sin enviar cookies.

Espero que te sirva

un saludo