Sistema de ingreso de usuario en PHP

Iniciado por jamarchi, 30 Marzo 2007, 22:10 PM

0 Miembros y 2 Visitantes están viendo este tema.

securedigital

Hola a todos.

Yo tengo por aaqui un post que colge mi codigo, que teoricamente no es tan facil de vulnerar, contraseñas cifradas en md5, se usan sessions.

Es un logins de usuario y contraseña, usado para acceder a ciertas partes o donde quieras, compuesto de 3 scripts.

1-conexion BBDD
2-Login
3-Code para proteger frente indeseados

Solo es que me esta dando problemas...xd estoy ahora cargandomelo un poco y arreglando problemillas. Ahora mismo ya no da errores SQL ni nada, pero tanto si el user como pass con correctos o no, entra de todas formas....

Enga a ver si alguien me hecha una mano que mi php no da para mas....


Saludos
The man who whispered to the computers
Der Mann, der zu den Computern flüsterte

                                                 FAD58DE7366495DB4650CFEFAC2FCD61

                                    

Luisango

ahora lo revisare a ver que tal, pero lo de las contraseñas en md5 base64 etc... son añadiduras que les puedes hacer o no, pero lo que importa es la base de todo eso, si no hay base, no hay nada  :P

S2!
Even better...

jamarchi


Hola Gente.....  :D, como les va?
Despues de algun tiempo de no poder volver a este tema, aqui estoy..... he modificado el codigo un poco para ver si ahora si hace lo que tiene que hacer ..... aqui lo pongo y por favor... si hay algo malo se aceptan sugerencias para arreglarlo, gracias de antemano....

validar.php

<?php
include ("includes/config.php");
include (
"includes/funciones.php");
//nos conectamos a mysql
$cnx conectar ();
if(
$_POST["entrar"]){
     if(
$_POST["username"] && $_POST["pass"]){
$contraseña md5("$_POST[pass]"); 
$query mysql_query("SELECT * FROM usuarios WHERE nick='".$_POST['username']."'",$cnx);
$datos mysql_fetch_array($query); 
if($datos['pass'] == $pass){ // si las pass son =// crea la cookie del usuario con la id el nick y la pass
setcookie("id",$datos['id'],time()+90000);
                
setcookie("nick",$datos['nick'],time()+90000);
setcookie("pass",$pass,time()+90000);
header("Location: resumen.php"); //redireccionas donde quieras login correcto
                }
}
}
else
header("Location: index.php");//pa la pag de error
?>



Resumen.php

<?php
//código inseguro xD
if($_COOKIE['id']) 
{echo 
"<h1>&nbsp;</h1>";
 echo 
"<h1>YES !!</h1>";
// Aqui va el codigo que quieras proteger
} else 
{echo 
"Solo los usuarios registrados pueden acceder a esta sección";
}
//Fin
echo"<p>&nbsp;</p>";
echo
"<a href='logout.php'>Salir</a>"
?>



Logout.php

<?php
setcookie
("user","0");
setcookie("id","0");

echo 
"<center><br>Sesión Finalizada<br>Que tenga un buen día ";

echo 
"<META HTTP-EQUIV=\"refresh\" content=\"1;URL=index.php\">";
?>



Espero que este mejor este codigo..... gracias  :)

Hans el Topo

no compruebas los intentos de lameradas... yo diría que es exactamente el code hace meses xD

Tiene hasta el comentario que le puse de código inseguro xD

<?php
//código inseguro xD
if($_COOKIE['id']) 
{echo 
"<h1>&nbsp;</h1>";
 echo 
"<h1>YES !!</h1>";
// Aqui va el codigo que quieras proteger
} else 
{echo 
"Solo los usuarios registrados pueden acceder a esta sección";
}
//Fin
echo"<p>&nbsp;</p>";
echo
"<a href='logout.php'>Salir</a>"
?>



tienes que comprobar que el username no contenga lameradas...xD
ahi lo lanzas sin más contra la base de datos y por lo tanto es vulnerable a SQLInyection xD

<?php if($_POST["username"] && $_POST["pass"]){
        
//eso no se si funciona... me da que cifra la cadena xD
//$contraseña = md5("$_POST[pass]");
        //así seguro que funciona xD  (de todos modos es inseguro)
        
$contraseña md5($_POST["pass"]); 
$query mysql_query("SELECT * FROM usuarios WHERE nick='".$_POST['username']."'",$cnx);
 

jamarchi


Hola Hans, gracias por tu respuestas

Oye... aque te refieres con "lameradas"

Agregando esto  if($_POST["username"] && $_POST["pass"]){ lo have mas seguno ?

Como lo mejoro ...... :-[

дٳŦ٭

#75
Lammeradas = intentos de "hack" por pseudoshackers

Para poner más seguridad hay de muchas formas:

1.- Revisa los referers.
2.- Quita las cookies y crea sesiones, es más seguro.
3.- Limpia las variables $_POST, $_GET, $_COOKIE, etc; addslashes(), htmlspecialchars(), mysql_escape_string().
4.- Revisa las cabeceras de los navegadores.
5.- Crea un mini-sistema de intentos fallidos, si 123.56.89.36 ha intentado autentificarse más de 5 veces dale ban desde un htaccess.
6.- Guarda logs de autentificaciones existosas como fallidas.

Etc.

EDIT

Hay muchas cosas que puedes hacer  ;)

Saludos


Con sangre andaluza :)


дٳŦ٭

Te adjunto el autentificator hecho por cluster de forosdelweb. Ya viene parchado contra la inyección sql descubierta por sidarkcat.

Hoy en la noche le voy hacer unas modificaciones al tuyo  ;)

Saludos


Con sangre andaluza :)


Novalis


Oye Jamarchi..... porque no usas Session.... creo que son un poco mas seguras que las cookies.... y segun se.... hasta mas faciles de usar....  ::)

jamarchi


Oye Navalis....

Gracias por el consejo.... voy a investigar sobre eso....

Pregunta.... las sesiones son mas seguras que las cookies ?

Saludos pueblo  ;D

jamarchi


Hola gente.... como les va ?  :D

Pues yo aqui de nuevo.....

Bueno.... despues de un buen rato de INVESTIGAR y BUSCAR tengo el siguiente codigo.... no es con cookies si no con session, aqui se los pongo....


Index.php

<table width=350 border=1 bgcolor=#3399FF>
<?php

//Se inicia la session
session_start();

$username $_SESSION['username'];
$password $_SESSION['password'];

//Chequea si hay username y password
if(!$username && !$password){
echo 
"Bienvenido Visitante! <br> <a href=login.php>Login</a> | <a href=register.php>Register</a>";
}else{
echo 
"Bienvenido ".$username." (<a href=logout.php>Salir</a>)";
echo 
"Aqui va la parte protegida ? ";
//echo "<table width=350 border=1 bgcolor=#3399FF>\n";
echo " <tr>\n";
echo 
"    <td>Esta parte es protegida ?</td>\n";
echo 
"  </tr>\n";
//echo "</table>\n";
}
?>

</table>


Login.php

<?php
session_start
();

//Formulario para entrar
function index(){

echo 
"<form action='?act=login' method='post'>"
    
."Username: <input type='text' name='username' size='30'><br>"
    
."Password: <input type='password' name='password' size='30'><br>"
    
."<input type='submit' value='Login'>"
    
."</form>";    

}

// Esta funcion chequea si la informacion es correcta
function login(){

//Toma la informacion del formulario
$username $_REQUEST['username'];
$password $_REQUEST['password'];


//conecta la base de datos
$connect mysql_connect("localhost""root""");
if(!
$connect){
die(
mysql_error());
}

//Selecciona la base
$select_db mysql_select_db("base_nombre");
if(!
$select_db){
die(
mysql_error());
}

//chequea si la informacion es correcta

$result mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'");
$row mysql_fetch_array($result);
$id $row['id'];

$select_user mysql_query("SELECT * FROM users WHERE id='$id'");
$row2 mysql_fetch_array($select_user);
$user $row2['username'];

if(
$username != $user){
die(
"Username incorrecto!");
}


$pass_check mysql_query("SELECT * FROM users WHERE username='$username' AND id='$id'");
$row3 mysql_fetch_array($pass_check);
$email $row3['email'];
$select_pass mysql_query("SELECT * FROM users WHERE username='$username' AND id='$id' AND email='$email'");
$row4 mysql_fetch_array($select_pass);
$real_password $row4['password'];

if(
$password != $real_password){
die(
"Password incorrecto!");
}



//Si todo es correcto crea las sesione y permite engresar

session_register("username"$username);
session_register("password"$password);

echo 
"Bienvenido, ".$username." Para continuar de click aqui en el <a href=index.php>Index</a>";




}

switch(
$act){

default;
index();
break;

case 
"login";
login();
break;

}
?>


Logout.php
<?php
session_start
();

//Aqui se destruye la session
session_destroy();
echo 
"Usted no esta logueado!, seleccione <a href=index.php>Index</a> o <a href=login.php>Ingresar</a>";

?>


Registrar.php
<?php

//Muestra el formulario de registro
function register_form(){

$date date('D, M, Y');
echo 
"<form action='?act=register' method='post'>"
    
."Username: <input type='text' name='username' size='30'><br>"
    
."Password: <input type='password' name='password' size='30'><br>"
    
."Confirmar password: <input type='password' name='password_conf' size='30'><br>"
    
."Email: <input type='text' name='email' size='30'><br>"
    
."<input type='hidden' name='date' value='$date'>"
    
."<input type='submit' value='Register'>"
    
."</form>";

}

//Registra la informacion del usuario
function register(){

//Connecta la database
$connect mysql_connect("localhost""root""");
if(!
$connect){
die(
mysql_error());
}

//Selectciona la database
$select_db mysql_select_db("data_name");
if(!
$select_db){
die(
mysql_error());
}

//Informacion
$username $_REQUEST['username'];
$password $_REQUEST['password'];
$pass_conf $_REQUEST['password_conf'];
$email $_REQUEST['email'];
$date $_REQUEST['date'];

//Apartir de aqui se empieza a chequear la informacion

if(empty($username)){
die(
"Favor digitar su username!<br>");
}

if(empty(
$password)){
die(
"Favor digitar su password!<br>");
}

if(empty(
$pass_conf)){
die(
"Favor confirmar su password!<br>");
}

if(empty(
$email)){
die(
"Favor digitar su email!");
}

//Chequeamos que el username no este en uso

$user_check mysql_query("SELECT username FROM users WHERE username='$username'");
$do_user_check mysql_num_rows($user_check);

//Ahora chequeamos si el email no este en uso

$email_check mysql_query("SELECT email FROM users WHERE email='$email'");
$do_email_check mysql_num_rows($email_check);

//Mostramos errores

if($do_user_check 0){
die(
"Ese Username ya esta registrado!<br>");
}

if(
$do_email_check 0){
die(
"Ese email ya esta registrado!");
}

//chequeamos que los passwords sean iguales

if($password != $pass_conf){
die(
"Los password digitados son diferentes!");
}


//Si todo esta bien, se agrega el usuario

$insert mysql_query("INSERT INTO users (username, password, email) VALUES ('$username', '$password', '$email')");
if(!
$insert){
die(
"Hay un problema: ".mysql_error());
}

echo 
$username.", ha sido registrado. muchas gracias!<br><a href=?act=login>Ingresar</a> | <a href=index.php>Index</a>";

}

switch(
$act){

default;
register_form();
break;

case 
"register";
register();
break;

}

?>


ahi se los pongo.... segun las pruebas que le he hecho esta bastante bien... pero talvez omite algo...

Muchas gracias  ;D