Autor
|
Tema: Sistema de ingreso de usuario en PHP (Leído 25,373 veces)
|
securedigital
Desconectado
Mensajes: 532
Do you enjoy with IBM OS/400 ¿
|
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
|
|
|
En línea
|
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 S2!
|
|
|
En línea
|
Even better...
|
|
|
jamarchi
Desconectado
Mensajes: 151
the best foro !!!
|
Hola Gente..... , 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> </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> </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
|
|
|
En línea
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
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> </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> </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);
|
|
|
En línea
|
|
|
|
jamarchi
Desconectado
Mensajes: 151
the best foro !!!
|
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 ......
|
|
|
En línea
|
|
|
|
дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
Desconectado
Mensajes: 5.110
|
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
|
|
« Última modificación: 1 Junio 2007, 12:05 pm por Ing_Amc »
|
En línea
|
|
|
|
дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
Desconectado
Mensajes: 5.110
|
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
|
|
|
En línea
|
|
|
|
Novalis
Desconectado
Mensajes: 16
|
Oye Jamarchi..... porque no usas Session.... creo que son un poco mas seguras que las cookies.... y segun se.... hasta mas faciles de usar....
|
|
|
En línea
|
|
|
|
jamarchi
Desconectado
Mensajes: 151
the best foro !!!
|
Oye Navalis.... Gracias por el consejo.... voy a investigar sobre eso.... Pregunta.... las sesiones son mas seguras que las cookies ? Saludos pueblo
|
|
|
En línea
|
|
|
|
jamarchi
Desconectado
Mensajes: 151
the best foro !!!
|
Hola gente.... como les va ? 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
|
|
|
En línea
|
|
|
|
|
|