Foros del Web » Programando para Internet » PHP »

Seguridad entre Todos

Estas en el tema de Seguridad entre Todos en el foro de PHP en Foros del Web. hola amigos quisiera compartirles un Scripts para autentificacion de usuarios.....es muy simple, no quiero competir con el trabajo de mi amigo "cluster" a quien admiro ...
  #1 (permalink)  
Antiguo 25/12/2002, 22:54
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 22 años, 10 meses
Puntos: 2
Seguridad entre Todos

hola amigos quisiera compartirles un Scripts para autentificacion de usuarios.....es muy simple, no quiero competir con el trabajo de mi amigo "cluster" a quien admiro mucho.....mi intencion es crear desde 0 este proyecto donde todos pueden participar con sus ideas y conocimientos, al final de esto me gustaria lograr un buen scripts de seguridad, que es tan importante en las paginas, pero principalmente que TODOS entiendan CADA LINEA DE CODIGO........bueno basta de PREAMBULO y a la accion!!!!!

-------------------------------INDEX.PHP---------------------------------------

<html>
<head>
<title>Autentificación en PHP</title>
</head>
<body>
<h1>Autentificación PHP</h1>
<form action="control.php" method="POST">
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center"
<?if ($_GET["errorusuario"]=="si"){?>
bgcolor=red><span style="color:ffffff"><b>Datos incorrectos</b></span>
<?}else{?>
bgcolor=#cccccc>Introduce tu clave de acceso
<?}?></td>
</tr>
<tr>
<td align="right">USUARIO:</td>
<td><input type="Text" name="usuario" size="8" maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWORD:</td>
<td><input type="password" name="contrasena" size="8" maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td>
</tr>
</table>
</form>
</body>
</html>

--------------------------------CONTROL.PHP----------------------------------

<?
//vemos si el usuario y contraseña es váildo
if ($_POST["usuario"]=="downwarez" && $_POST["contrasena"]=="colaboracion"){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
session_register("autentificado");
$autentificado = "SI";
header ("Location: aplicacion.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
?>

------------------------------SEGURIDAD.PHP---------------------------------

<?
//TOMO VARIABLES DE SESION SOBRE LA AUTENTIFICACION
session_register("autentificado");
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($autentificado != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>

-----------------------------SALIR.PHP------------------------------------------

<?
session_start();
session_destroy();
?>
<html>
<head>
<title>Has salido!!</title>
</head>
<body>
Gracias por tu acceso
<br>
<br>
<a href="index.php">Formulario de autentificación</a>
</body>
</html>

------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
bueno empecemos con algo de TEORIA:

el primer archivo, me refiero al "index.php" contiene los editbox usuario y password, que se envian al la pagina "control.php" .
ademas "index.php" contiene la variable errorusuario, recibida por la URL y que informa si se produjo un error anterior al introducir usuario y contraseña, se está recogiendo por mediación del array asociativo $_GET, que guarda todas las variables enviadas por la URL.
El archivo "control.php" es el encargado de controlar si los datos de usuario y password son CORRECTOS, de ser esto afirmativo se crea una "session", o sea en otras palabras PHP le asigna al visitante un numero unico e irrepetible, que nos servira a nosotros posteriormente para verificar que el visitante realmente se logeado en la zona restringida por medio del formulario y no a entrado por otros medios que veremos luego, de nos ser asi el usuario sera redireccionado automaticamente al formulario de logueo.
En el archivo "seguridad.php" lo que hago es verificar si existe una session y tomarla......porque si se logueo correctamente tendria que haber recibido una session de usuario......de esta manera evitaremos.....a ciertos LAMERS!!! que tuvieran la idea de entrar a la zona restringida con tan solo colocar la direccion en el navegador sin pasar por el formulario de logueo. si esto pasara serian automaticamente direccionados al formulario!ejejej.
y para finalizar en el archivo "salir.php" lo que hacemos es DESTRUIR la session o sea el "comprobante" que nos dieron cuando colocamos el nombre de usuario y password correctos!!!!.
Esto es muy importante darle al visitante la posibilidad de DESLOGUERSE en cualquier momento, sin embargo las sesiones se finalizan solas cuando pasa un determinado tiempo sin recibir nuevas peticiones, pero no deseamos que antes de que se finalicen se pueda acceder con ese ordenador a nuestra aplicación restringida. Puede ocurrir que el usuario entre en la aplicación e inicie una sesión y que se marche de la aplicación segura sin cerrar la sesión, con lo que quedaría abierta para que cualquier otra persona pueda acceder a la aplicación volviendo por el historial de páginas del navegador.

------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
bueno espero comentarios ideas criticas o lo que sea!!!
Gracias por leer este POST, Feliz navidad y Año Nuevo para TODOS ustedes......y Recuerden que si DIOS hiciera paginas web, seguramente las haria en PHP!!!!!
  #2 (permalink)  
Antiguo 26/12/2002, 09:58
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 10 meses
Puntos: 0
Hola
solo pongo el mismo codigo coloreado, es mas facil de leer

Código PHP:
<html>
<head>
<title>Autentificación en PHP</title>
</head>
<body>
<h1>Autentificación PHP</h1>
<form action="control.php" method="POST">
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center"
<?if ($_GET["errorusuario"]=="si"){?>
bgcolor=red><span style="color:ffffff"><b>Datos incorrectos</b></span>
<?}else{?>
bgcolor=#cccccc>Introduce tu clave de acceso
<?}?></td>
</tr>
<tr>
<td align="right">USUARIO:</td>
<td><input type="Text" name="usuario" size="8" maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWORD:</td>
<td><input type="password" name="contrasena" size="8" maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td>
</tr>
</table>
</form>
</body>
</html>

--------------------------------CONTROL.PHP----------------------------------

<?
//vemos si el usuario y contraseña es váildo
if ($_POST["usuario"]=="downwarez" && $_POST["contrasena"]=="colaboracion"){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
session_register("autentificado");
$autentificado "SI";
header ("Location: aplicacion.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
?>

------------------------------SEGURIDAD.PHP---------------------------------

<?
//TOMO VARIABLES DE SESION SOBRE LA AUTENTIFICACION
session_register("autentificado");
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($autentificado != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>

-----------------------------SALIR.PHP------------------------------------------

<?
session_start
();
session_destroy();
?>
<html>
<head>
<title>Has salido!!</title>
</head>
<body>
Gracias por tu acceso
<br>
<br>
<a href="index.php">Formulario de autentificación</a>
</body>
</html>
  #3 (permalink)  
Antiguo 26/12/2002, 12:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Te recomiendo que hagas una simple página web con este código, lo documentes y hagas los correspondientes ficheros .php que correspondan .. ademas de un .zip (pack) con los ficheros q intervengan. Así tus usuarios podran colaborar de alguna forma .. por ejemplo avisandote de errores si los hay (como a mi me ha ocurrido con mi Autentificator) o simplemente para darte las gracias (acuerdate de poner un mail de contacto al menos ..)

Como mejoras (siguiendo la filosofia de simplicidad que tienes en el cógido) te recomendaria usar un array simple para guardar los datos de los usuarios/pass y así apliar en mas de 1 usuario tu sistema de autentificación .. Sería mas versátil sin complicarlo con ficheros de texto plano o Base de datos...

Otro detalle .. Indica que tu código funciona bajo:
- Propagación automática del SID
- Register Globals a ON/OFF ?

Y que usa sessiones.

Si quieres, tambien puedes colocarlos en las FAQ's de PHP .. Ya hay un sistema de autentificación, pero es HTTP .. el tuyo usa Sessiones y es valido (por lo que hay) para un usuario/contraseña.

Y ... Esto no lo veo correcto:

<?
//TOMO VARIABLES DE SESION SOBRE LA AUTENTIFICACION
session_register("autentificado");
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($autentificado != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>

sería:

Código PHP:
<?
//TOMO VARIABLES DE SESION SOBRE LA AUTENTIFICACION
session_start();
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO
if ($HTTP_SESSION_VARS['autentificado'] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>
ó ..

if ($_SESSION['autentificado'] != "SI") {

Si haces session_register() .. registras la variable otra vez .. se supone que tienes q leerla de la session. Tal vez te funciona porque toma el valor "global" de $autentificado si se lo pasas?¿

Tambien indica que seguridad.php .. deben de incluirla en cada pagina que requiera autentificacion via un include() o lo que estimes oportuno ...

Un saludo,
  #4 (permalink)  
Antiguo 26/12/2002, 13:58
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Quisquilloso que es uno. Creo que deberias usar la etiqueta completa de apertura de PHP, no la "corta". Es decir, usar <?php en lugar de <?. Mas que nada porque si no tu script solo funcionara en instalaciones que tengan activada la opcion de aceptar el formato "corto", ademas de los problemas que te puede dar si trabajas con XML.

Otro detalle sobre lo de if ($autentificado != "SI") . ¿Que pasa si estamos con register_globals a ON y pasamos por URL o por formulario la variable $autentificado con el valor "SI"? Por eso creo que es mejor usar los arrays como dice Cluster, o usar session_is_registered() y alguna forma para asegurar que lee la variable de sesion y no la GET, POST o incluso COOKIE.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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




La zona horaria es GMT -6. Ahora son las 22:08.