Foros del Web » Programando para Internet » PHP »

Login simple pero seguro

Estas en el tema de Login simple pero seguro en el foro de PHP en Foros del Web. Hola os pregunto cual seria la forma mas segura de hacer un login en la web, yo solo quiero un usuario por lo que veo ...
  #1 (permalink)  
Antiguo 29/05/2009, 11:43
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Login simple pero seguro

Hola
os pregunto cual seria la forma mas segura de hacer un login en la web,
yo solo quiero un usuario por lo que veo un poco absurdo usar bases de datos, pero si los expertos lo aconsejan asi lo hare,

Mi login es tan simple que solo puede entrar una persona, qe seria un administrador, pero me gustaria poner un capcha se llama asi verdad?
el caso es hacerlo lo mas seguro posible ya que al acceder podria subir ficheros al servidor.



Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 29/05/2009, 12:07
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Podrias usar sesiones, para mi es lo mas seguro que hay, por ejemplo, una cosa asi:

Archivo index.php (o la pagina que quieras proteger):
Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['es_admin']))
{
 include 
"login.php";
}
else
{
 
?>
 el resto de la pagina va aqui con html
 <?php
}
?>
Archivo login.php:
Código PHP:
<?php
if (!isset($_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  Usuario: <input type="text" name="usuario" /><br>
  Contrasena: <input type="password" name="contrasena" />
  <input type="submit" value="Iniciar Sesion" />
 </form>
 <?php
}
else
{
 
$usuario $_POST['usuario'];
 
$contrasena $_POST["contrasena"];
 
$user ''// entre las comillas el usuario que quieras para el login
 
$pass ''// lo mismo para la contraseña
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: ?");
 }
 else
 {
 echo 
"El nombre de usuario o la contrasena ingresada son incorrectos.";
 }
}
?>
Este sistema es solo para un usuario, si quieres hacerlo con mas usuarios te recomiendo que uses una base de datos.
Ahora cada vez que cualquier persona que ingrese a la pagina index.php, le pedira nombre de usuario y contraseña y depende de si es correcta o no lo deja pasar. Espero que te sirva, Saludos.
  #3 (permalink)  
Antiguo 29/05/2009, 12:13
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Login simple pero seguro

Cita:
Iniciado por Kenichi Ver Mensaje
Podrias usar sesiones, para mi es lo mas seguro que hay, por ejemplo, una cosa asi:

Archivo index.php (o la pagina que quieras proteger):
Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['es_admin']))
{
 include 
"login.php";
}
else
{
 
?>
 el resto de la pagina va aqui con html
 <?php
}
?>
Archivo login.php:
Código PHP:
<?php
if (!isset($_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  Usuario: <input type="text" name="usuario" /><br>
  Contrasena: <input type="password" name="contrasena" />
  <input type="submit" value="Iniciar Sesion" />
 </form>
 <?php
}
else
{
 
$usuario $_POST['usuario'];
 
$contrasena $_POST["contrasena"];
 
$user ''// entre las comillas el usuario que quieras para el login
 
$pass ''// lo mismo para la contraseña
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: ?");
 }
 else
 {
 echo 
"El nombre de usuario o la contrasena ingresada son incorrectos.";
 }
}
?>
Este sistema es solo para un usuario, si quieres hacerlo con mas usuarios te recomiendo que uses una base de datos.
Ahora cada vez que cualquier persona que ingrese a la pagina index.php, le pedira nombre de usuario y contraseña y depende de si es correcta o no lo deja pasar. Espero que te sirva, Saludos.
es un poco exagerado pero yo añadiría esto:

Código PHP:
<?php
if (!($_SESSION['count'] < 3)) exit;
if (!isset(
$_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  Usuario: <input type="text" name="usuario" /><br>
  Contrasena: <input type="password" name="contrasena" />
  <input type="submit" value="Iniciar Sesion" />
 </form>
 <?php
}
else
{
 
$usuario $_POST['usuario'];
 
$contrasena md5($_POST["contrasena"]);
 
$user ''// entre las comillas el usuario que quieras para el login
 
$pass ''// lo mismo para la contraseña que ha sido previamente encriptada en md5
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: ?");
 }
 else
 {
  
$_SESSION['count'] = ($_SESSION['count'] == 01$_SESSION['count']+1;
 echo 
"El nombre de usuario o la contrasena ingresada son incorrectos.";
 }
}
?>
  #4 (permalink)  
Antiguo 29/05/2009, 12:13
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Muchas gracias algo asi pensaba simple y seguro, yo tambien pense en el uso de bases de datos pero veo una tonteria hacerlo para un solo usuario, y otra pregunta si es posible, al poner hay la contraseña y usuario no podrian sacarla facilmente??


Yo tb pensaba hacer un contador de intentos si hace 3 intentos sin exito que le salte una pagina o en la que te diga qe vuelva a ingresar para qe no me peten el servidor o algo asi con tanto logeo si exito, qe te parece??



Saludos
  #5 (permalink)  
Antiguo 29/05/2009, 12:18
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Cita:
Muchas gracias algo asi pensaba simple y seguro, yo tambien pense en el uso de bases de datos pero veo una tonteria hacerlo para un solo usuario, y otra pregunta si es posible, al poner hay la contraseña y usuario no podrian sacarla facilmente??
Nop, ya que PHP es un lenguaje del servidor y solo aparece en el navegador el resultado de sus consultas al servidor, es decir, si pones una variable $hola = "hola", eso no saldria en el navegador, a menos que tu lo hagas salir.

Por cierto, jaao_death, si usas md5 en la contraseña que es ingresada por el usuario, tambien debes hacerlo con la contraseña de $pass = '', sino, las contraseñas nunca van a ser iguales, siempre la que ingresa el usuario cambia con la funcion md5().
  #6 (permalink)  
Antiguo 29/05/2009, 12:30
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Login simple pero seguro

no pienses que no lo tuve en cuenta, por eso en el comentario de $pass = '' añadí "previamente encriptada en md5...
esto es solo una medida de seguridad algo extrema, pues en el caso remoto de que un usuario consiga acceso al servidor por medio de SSH o FTP o alguno parecido este podría ver la contraseña y esto sería un problema si acostumbras a usar la misma pass para todo, e-mail, blog, foros, etc...
por cierto, el captcha, veré si te preparo uno, pues un robot podría pasar de la cookie que identifica la session, con lo cual $_SESSION['count'] siempre sería 0
  #7 (permalink)  
Antiguo 29/05/2009, 12:32
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Cita:
Iniciado por jaao_death Ver Mensaje
no pienses que no lo tuve en cuenta, por eso en el comentario de $pass = '' añadí "previamente encriptada en md5..."
No lo habia leido xD
  #8 (permalink)  
Antiguo 29/05/2009, 15:36
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola muchas gracias por la ayuda lo del md5 ya lo habia corregido, lo unico qe me da error es el contador de intentos fallidos,

el captcha da mas seguridad al no poder generar un script qe me genere logeos no??

y otra pregunta que tengo desde hace tiempo en alguna web tengo el tipico upload de imagenes, la cosa es que si no le doy permisos totales a la carpeta no me deja subir fotos, eso seria peligroso para la seguridad? ya que en una carpeta podrian hacer lo que quisieran

Saludos
  #9 (permalink)  
Antiguo 29/05/2009, 15:48
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años, 1 mes
Puntos: 12
Respuesta: Login simple pero seguro

Holas

El contador de Intentos, en la parte de abajo, dejalo asi:

Código PHP:
$_SESSION['count'] = $_SESSION['count'] + 1
Asi me funciono, excelente el aporte gente

Saludos
__________________
CabaSoft Networks
  #10 (permalink)  
Antiguo 30/05/2009, 10:11
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola gente lo de los intentos seria algo asi no?

if($_SESSION['count'] <4){
$_SESSION['count'] = $_SESSION['count'] + 1;
}else{

echo "Lo sentimos usted no es el administrador";

}

Donde el echo seria mejor poner un header para redireccionar a una pagina de fallo o algo asi no??



Saludos y haber si me podeis explicar como funciona el captcha
  #11 (permalink)  
Antiguo 30/05/2009, 10:16
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

perdon por preguntar tanto,

esto no se podria poner asi para ahorra codigo??

$_SESSION['count'] += 1;




Saludos
  #12 (permalink)  
Antiguo 30/05/2009, 10:22
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Creo que no, te daria syntax error, pero intenta y di que sucede
  #13 (permalink)  
Antiguo 30/05/2009, 18:35
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

No lo he podido probar pero dejare la linea como decis, lo que tambien pense en poner una variable normal y qe se incremente si no es correcta la contraseña o el usuario, porqe lo del $_SESSION['count'] no lo entiendo, si me lo pedeis explicar, haber si queda muy seguro el login este



Saludos y gracias por la ayuda
  #14 (permalink)  
Antiguo 30/05/2009, 18:48
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Igual en vez de poner +=1 pon solo ++; al final y listo, es lo mismo :P
  #15 (permalink)  
Antiguo 31/05/2009, 02:28
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola,
weno pues esto va avanzando jeje tambien use el md5 con el usuario, que creo que no recarga mucho, y algo de seguridad añadira no???

aqui os dejo el codigo que me pasasteis como lo tengo

Código PHP:
<?php

if (!isset($_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  <table border="0" style="margin:185px;border:2px solid #cc9900;"align="center">
  <tr>
  <td>Usuario: </td><td> <input type="text" name="usuario" /></td>
  </tr>
  <tr><td>Contraseña: </td> <td><input type="password" name="contrasena" /></td></tr>
  <tr ><td colspan="2"><input type="submit" value="Iniciar Sesion" /></td></tr>
 </form>
 <?php
}
else
{
 
$usuario md5($_POST['usuario']);
 
$contrasena md5($_POST["contrasena"]);
 
$user md5('lucas'); // entre las comillas el usuario que quieras para el login
 
$pass md5('lucas'); // lo mismo para la contraseña que ha sido previamente encriptada en md5
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: subirficheros.php");
 }
 else
 {
     
//SI INTRODUCE MAL EL PASWORD O LA CONTRASEÑA SE INCREMENTA EL CONTADOR Y SOLO TIENE 3 INTENTOS DESPUES SE MANDA AL USUARIO A OTRA PAGINA CON UN //MENSAJE DONDE SE LE DICE QUE NO ES EL ADMINISTRADOR Y SI QUIERE LOGEARSE PINCHE EN EL ENLACE
  
if($_SESSION['count'] <4){
        
$_SESSION['count'] = $_SESSION['count'] + 1
        }else{

        
header(Location:'noesadministrador.php';)

        }

 }
}
?>
La pregunta de hoy es, al ingresar correctamente tendre una pagina con 4 enlaces a 4 temas en cada uno queria tener un upload para poder subir pdf, o doc
la cosa esque los qe tengo tengo qe poner en los 4 directorios permisos totales, entonces hay podria haber algun problema de seguridad???

Y en cuanto al captcha, como funciona?? se que genera una imagen de texto aleatoria, pero luego que hace que si metes bien las palabras envia el contenido del formulario y sino se refresca y genera otra imagen ??



Saludos
  #16 (permalink)  
Antiguo 31/05/2009, 11:51
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola

hoy he podido probar el codigo de php,
pero me sale un problema si introduzco mal la contraseña

Código PHP:
<?php

if (!isset($_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  <table border="0" style="margin:185px;border:2px solid #cc9900;"align="center">
  <tr>
  <td>Usuario: </td><td> <input type="text" name="usuario" /></td>
  </tr>
  <tr><td>Contraseña: </td> <td><input type="password" name="contrasena" /></td></tr>
  <tr ><td colspan="2"><input type="submit" value="Iniciar Sesion" /></td></tr>
 </form>
 <?php
}
else
{
 
$usuario md5($_POST['usuario']);
 
$contrasena md5($_POST["contrasena"]);
 
$user md5('lucas'); // entre las comillas el usuario que quieras para el login
 
$pass md5('lucas'); // lo mismo para la contraseña que ha sido previamente encriptada en md5
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: subirficheros.php");
 }
 else
 {
     
     
//SI INTRODUCE MAL EL PASWORD O LA CONTRASEÑA SE INCREMENTA EL CONTADOR Y SOLO TIENE 3 INTENTOS DESPUES SE MANDA AL USUARIO A OTRA PAGINA CON UN //MENSAJE DONDE SE LE DICE QUE NO ES EL ADMINISTRADOR Y SI QUIERE LOGEARSE PINCHE EN EL ENLACE
  
if($_SESSION['count'] <4){
        
$_SESSION['count'] = $_SESSION['count'] + 1
        
header("Location: index.php");

        }else{

        
header("Location:noesadministrador.php");

        }

 }
}
?>
Nose si esque al recargar la pagina al index.php se pone a 0 el contador de sesion pued ser?


Saludos
  #17 (permalink)  
Antiguo 31/05/2009, 11:55
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Si puede ser, porque te olvidaste de poner al principio session_start();
Es decir, te tiene q quedar asi:
Código PHP:
<?php
session_start
(); // Iniciamos la sesion para contar los intentos.

if (!isset($_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  <table border="0" style="margin:185px;border:2px solid #cc9900;"align="center">
  <tr>
  <td>Usuario: </td><td> <input type="text" name="usuario" /></td>
  </tr>
  <tr><td>Contraseña: </td> <td><input type="password" name="contrasena" /></td></tr>
  <tr ><td colspan="2"><input type="submit" value="Iniciar Sesion" /></td></tr>
 </form>
 <?php
}
else
{
 
$usuario md5($_POST['usuario']);
 
$contrasena md5($_POST["contrasena"]);
 
$user md5('lucas'); // entre las comillas el usuario que quieras para el login
 
$pass md5('lucas'); // lo mismo para la contraseña que ha sido previamente encriptada en md5
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: subirficheros.php");
 }
 else
 {
     
     
//SI INTRODUCE MAL EL PASWORD O LA CONTRASEÑA SE INCREMENTA EL CONTADOR Y SOLO TIENE 3 INTENTOS DESPUES SE MANDA AL USUARIO A OTRA PAGINA CON UN //MENSAJE DONDE SE LE DICE QUE NO ES EL ADMINISTRADOR Y SI QUIERE LOGEARSE PINCHE EN EL ENLACE
  
if ($_SESSION['count'] <4)
  {
        
$_SESSION['count']++; 
        
header("Location: index.php");

   }
   else
   {
    
header("Location:noesadministrador.php");
   }
 }
}
?>
  #18 (permalink)  
Antiguo 31/05/2009, 12:09
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola muchas gracias jeje,

ya lo habia solucionado iniciando asi

$_SESSION['count'] = TRUE;


porqe antes me decia qe no estaba definida la sesion

pero ahora el problema weno el arreglo es que no te permite tres intentos, si metes mal la contraseña sale la ventana que hice para darle a volver



Saludos
  #19 (permalink)  
Antiguo 31/05/2009, 13:39
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola

aqui os dejo los tres ficheros del logueo,

index.php

Código PHP:
<?php
session_start
(); // Iniciamos la sesion para contar los intentos.

if (!isset($_POST['usuario']))
{
 
?>
 <form action="?" method="post">
  <table border="0" style="margin:185px;border:2px solid #cc9900;"align="center">
  <tr>
  <td>Usuario: </td><td> <input type="text" name="usuario" /></td>
  </tr>
  <tr><td>Contraseña: </td> <td><input type="password" name="contrasena" /></td></tr>
  <tr ><td colspan="2"><input type="submit" value="Iniciar Sesion" /></td></tr>
 </form>
 <?php
}
else
{
 
$usuario md5($_POST['usuario']);
 
$contrasena md5($_POST["contrasena"]);
 
$user md5('lucas'); // entre las comillas el usuario que quieras para el login
 
$pass md5('lucas'); // lo mismo para la contraseña que ha sido previamente encriptada en md5
 
if ($usuario == $user && $contrasena == $pass)
 {
 
$_SESSION['es_admin'] = true;
 
header("Location: subirficheros.php");
 }
 else
 {
     
     
/*SI INTRODUCE MAL EL PASWORD O LA CONTRASEÑA SE INCREMENTA EL CONTADOR Y SOLO TIENE 3 INTENTOS DESPUES SE MANDA AL USUARIO A OTRA PAGINA CON UN //MENSAJE DONDE SE LE DICE QUE NO ES EL ADMINISTRADOR Y SI QUIERE LOGEARSE PINCHE EN EL ENLACE*/
     
$_SESSION['count'] = true;
  if(
$_SESSION['count'] <4){
        
$_SESSION['count'] = $_SESSION['count'] + 1
        

        }else{

        
header("Location:noesadministrador.php");

        }

 }
}
?>

subirfotos.php

Código PHP:
<?php
session_start
();
if (!isset(
$_SESSION['es_admin']))
{
 include 
"index.php";
}
else
{
 
?>
<!-- CODIGO HTML -->
<A HREF='logout.php' >Desloguearse</A>
 <?php
}
?>
logout.php

<?php
session_start();//para saber cual es la sesion a destruir
session_unset();//para eliminar las variables de sesion
session_destroy();//con esto destruyes la sesion
header('Location:index.php');



?>

Cuando estoy en subirfotos.php y me deslogueo luego en index.php me sale este error

Notice: A session had already been started - ignoring session_start() in C:\wamp\www\SalvadorRus\administrator\index.php on line 43


Saludos y gracias
  #20 (permalink)  
Antiguo 31/05/2009, 13:56
Avatar de Kenichi  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 160
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Login simple pero seguro

Eso es porque en el archivo subirfotos.php tienes al principio el session_start(); para crear una sesion, y si no eres admin y vas alli se incluye el archivo index.php que tiene otro session_start(); al principio, la solucion seria que si no es admin que lo mande al index.php en vez de hacerle un include.
  #21 (permalink)  
Antiguo 31/05/2009, 14:00
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Gracias Kenichi
espero que le sirva a mas gente

entonces mejor que include poner

header("Location:index.php");


Saludos
  #22 (permalink)  
Antiguo 03/06/2009, 13:23
 
Fecha de Ingreso: mayo-2006
Mensajes: 154
Antigüedad: 17 años, 11 meses
Puntos: 0
Respuesta: Login simple pero seguro

Hola

jaao_death me podrias explicar como usar el catpcha?

ahora mismo tengo que si mete mal el usuario o la contraseña con header le manda a otra pagina donde le dice que la contraseña es incorrecta y un enlace para volver al login, eso para los robots sera facil de saltarse no???

weno y por lo que he leido el captcha tambien el captcha lo han conseguido saltar.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:55.