| 
	
		|  Autor | Tema: Sistema de ingreso de usuario en PHP    (Leído 27,568 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 Resumen.php<?phpinclude ("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
 ?>
 
Logout.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>"
 ?>
 
<?phpsetcookie("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 Login.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>
 
Logout.php<?phpsession_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;
 
 }
 ?>
Registrar.php<?phpsession_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>";
 
 ?>
<?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 | 
 
 |  |  |  |  |  
 
	
 
   |