Ayuda con sistema de login

Iniciado por 0x0309, 13 Octubre 2009, 22:14 PM

0 Miembros y 1 Visitante están viendo este tema.

0x0309

Hola, estoy intentando desarrollar un sistema de login en php, al parecer todo funciona bien, pero lo que no me funciona es el sistema anti session hijacking.
Quisiera saber si alguien me puede ayudar a encontrar el problema.

Para probar el csrf, una vez logueado con tamper data trato de enviar logout pero eliminando el t= Entonces dice csrf attempt.

Pero para probar session hijacking, no me funciona el tema del $fingerprint, una vez logueado, abro otra pestaña con firefox, y accedo a la url viendo el contenido exlusivo, si abro otra pestaña y accedo a la url, pero modificando el user agent, no se cae, diciendo session hijacking attempt, como que no cambia la cadena $fingerprint, y ese es el problema que tengo.

Si alguien por favor también pudiera darme sugerencias para hacer un buen sistema de login, se lo agradecería también.

Código (php) [Seleccionar]

//editado porque no estaba bueno. Abajo encuentran un código más decente.

0x0309

Bueno, me respondo solo.

La solución fue comenzar a escribir todo de nuevo, pero basándome en funciones para así revisar y encontrar los errores.

Al final, no sé cual era el error, pero cree un código nuevo y funciona.

Este es el código, puede servirle a alguien.

/inc/auth.php
Código (php) [Seleccionar]

<?php

if (!defined('VER'))
die('Hacking attempt...');

function 
sesionPorDefecto()
{
    
cerrarSesion();
    
session_regenerate_id();
    
$_SESSION['logeado'] = false;
    
$_SESSION['anticsrf'] = 0;
    
$_SESSION['token'] = 0;
}

function 
cerrarSesion()
{
    
session_start();
    
session_unset();
    
session_destroy();
}

function 
estaLogeado()
{
    
session_start();
    if (isset(
$_SESSION['logeado'])
    
    && $_SESSION['logeado'] === true) {
        return 
true;
    }
    return 
false;
}

function 
intentoCsrf()
{
    
session_start();
    if (!isset(
$_SESSION['anticsrf'])
    
|| $_SESSION['anticsrf'] !== $_POST['t']
    
)
    {
    
return true;
    }
    return 
false;
}

function 
intentoSessionHijacking($fingerprint)
{
    if (
estaLogeado()
    
&& $_SESSION['token'] !== $fingerprint)
    {
    
return true;
    }
    return 
false;
}

?>




/inc/filtros.php

es el code que se encuentra en:
http://foro.elhacker.net/php/filtro_sql_injection_y_filtro_xss-t270635.0.html
el foro no me deja postearlo.


/logout.php
Código (php) [Seleccionar]

<?php
define
('VER',1);
require_once(
dirname(__FILE__).'/inc/auth.php');
require_once(
dirname(__FILE__).'/inc/filtros.php');


if (
estaLogeado()
   && !
intentoCsrf())
{
    
cerrarSesion();
    echo 
'Session closed.';
    echo 
'<br/>';
    echo 
'<a href="login.php">Go Login</a>';
    die ();
} else {
    die (
'Csrf attempt ...');
}

?>



/login.php
Código (php) [Seleccionar]

<?php
define
('VER',1);
require_once(
dirname(__FILE__).'/inc/auth.php');
require_once(
dirname(__FILE__).'/inc/filtros.php');

$fingerprint $fingerprint md5('12345'.$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].'6789');

if (
intentoSessionHijacking($fingerprint))
{
    
cerrarSesion();
    die(
'Session hijacking attempt ...');
}


if (!
estaLogeado())
{
    if (
$_POST['username'] && $_POST['password'])
    {
$username antiSQLInjection($_POST['username']);
$password antiSQLInjection($_POST['password']);

//Hacer consulta en bd.

if ($username == 'carlos' && $password == 'entrar')
{
    session_regenerate_id();
    $_SESSION['logeado'] = true;
    $_SESSION['anticsrf'] = sha1('dfGFGsfsdf46433794bvcv' uniqid(rand(), TRUE) . 'addsfFHf5efSAfr324');
    $_SESSION['token'] = $fingerprint;
}
    }
}

if (!
estaLogeado())
{
?>


    <form method='POST' action='login.php'>
    <span>Username:</span>
    <input name="username" type="text" maxlength="20" size="20" />
    <span>Password:</span>
    <input name="password" type="text" maxlength="15" size="20" />
    <input name="login" type="submit" value="Login" />
    </form>

<?php
} else
{
    echo 
'You are logged' '<br/>';
    echo 
'<a href="index.php">Go Home</a>';
    echo (
"
    <form method='POST' action='logout.php'>
        <input name=\"t\" type=\"hidden\" value=\"" 
$_SESSION['anticsrf'] ."\" />
        <input name=\"logout\" type=\"submit\" value=\"Logout\" />
    </form>
    "
);
}
?>