PDA

Ver la Versión Completa : Validacion de usuario/s - Acceso Restringido



Raul
13/08/2009, 19:14
Estimados, soy nuevo con esto de las sesiones y queria ver si este script que modifique para mi uso es viable en lo seguro.
Que tipo de ventajas o desventajas posee.
Se incorporaria en un sitio con una validacion simple.
Consta de 3 archivos.

index.php (documento de acceso restringido).


<?php
ob_start();
require('acceso.php');
ob_end_flush();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<style type="text/css">
<!--
input {border:1px solid #606060; background: #DDDDDD}
-->
</style>
</head>

<body> Usuario y Password correctos <br /><br /><br />
<?=$logout_button?>
</body>
</html>


acceso.php (documento que solicita usuario y contraseña lo cual se encuentra encriptada por md5 en un documento de texto).


<?php

/* configuracion */

$cookiename = 'golegrolksnndmksiiJKJJSks';
$expirytime = time()+3600;
$msg = 'usuario/password incorrecto.';

/* End Configuracion */

/* Logout */

if (isset($_REQUEST['logout'])) {
setcookie($cookiename,'',time() - 3600);
if (substr($_SERVER['REQUEST_URI'],-12)=='?logout=true') {
$url=str_replace('?logout=true','',$_SERVER['REQUEST_URI']);
header('Location: '.$url);
}
show_login_page('');
exit();
}

$logout_button='<form action="'.$_SERVER['REQUEST_URI'].'" method="post"><input type="submit" name="logout" value="Logout" /></form>';
$logout_text='<a href="'.$_SERVER['REQUEST_URI'].'?logout=true">Logout</a>';

/* End Logout */

/* FUNCTIONS */
function setmycookie() {
global $cookiename,$encrypt_pass,$expirytime;
setcookie($cookiename,$encrypt_pass,$expirytime);
}

function show_login_page($msg) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Autorizacion Requerida</title>
<style type="text/css">
<!--
.error {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #A80000;
font-weight: bold;
}
input {border:1px solid #606060; background: #DDDDDD}
.Estilo1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #333333;
font-weight: bold;
}
-->
</style>
</head>
<body>
<form action="" method="POST">
<table width="400" border="0" align="center" cellpadding="0" cellspacing="3">
<tr>
<td width="127" align="right"><span class="Estilo1">usuario:</span></td>
<td width="264"><label><input name="usuario" type="text" id="usuario" size="20" maxlength="20" />
(admin)</label></td>
</tr>
<tr>
<td align="right" class="Estilo1">password:</td>
<td><input type="password" name="password" size="20">
(demo)</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" value="login"><input type="hidden" name="sub" value="sub"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><div class=error><?=$msg?></div></td>
</tr>
</table>
</form>
</body>
</html>
<? }
/* END FUNCTIONS */
$errormsg='';
if (substr($_SERVER['REQUEST_URI'],-7)!='acceso.php') {
if (isset($_POST['sub'])) {
$submitted_pass=md5($_POST['password']);
$submitted_usua=$_POST['usuario']; //$submitted_usua=md5($_POST['usuario']);
$fich = file($_SERVER['DOCUMENT_ROOT']."usuarios.txt");
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($submitted_usua==$campo[0]) && ($submitted_pass==chop($campo[1]))) $valida=true;
$i++;
}

if (!$valida) {
$errormsg=$msg;
show_login_page($errormsg);
exit();
} else {

setmycookie();
}


} else {
if (isset($_COOKIE[$cookiename])) {
if ($_COOKIE[$cookiename]==$encrypt_pass) {
} else {
show_login_page($errormsg);
exit();
}
} else {
show_login_page($errormsg);
exit();
}
}
} else {
}
?>

usuarios.txt (Documento que contiene usuario y contraseñas - encriptadas md5 -).


admin|fe01ce2a7fbac8fafaed7c982a04e229

NOTA:
Para su funcionamiento, como se observa en index.php se debe de incorporar al principio del archivo a protejer el siguiente codigo:
(Este archivo a protejer puede estar en cualquier directorio dentro del sitio)

<?php
ob_start();
require('acceso.php');
ob_end_flush();
?>


Gracias, espero comentarios.
Raul :D

PatriarK
14/08/2009, 13:56
Lo único que se me ocurre para mejorar la seguridad es que modifiques la ubicación del archivo de claves, en lugar de usar la variable de entorno $_SERVER['DOCUMENT_ROOT'] que te deja dentro de tu carpeta pública, podés hacer una referencia a la carpeta principal del usuario mediante una ruta absoluta del tipo /home/usuario/archivo.txt.
Con eso estarías seguro que tu archivo de claves sólo podría ser visto por la aplciación y no desde un navegador.

Raul
15/08/2009, 02:11
Lo único que se me ocurre para mejorar la seguridad es que modifiques la ubicación del archivo de claves, en lugar de usar la variable de entorno $_SERVER['DOCUMENT_ROOT'] que te deja dentro de tu carpeta pública, podés hacer una referencia a la carpeta principal del usuario mediante una ruta absoluta del tipo /home/usuario/archivo.txt.
Con eso estarías seguro que tu archivo de claves sólo podría ser visto por la aplciación y no desde un navegador.

Si, gracias.
Pero me temo que el script funciona solo en una primer pagina.
Si lo coloco en cascada me pierde la sesion y no encuentro la forma de solucionarlo.