Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/10/2011, 03:02
bruno911
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años
Puntos: 5
Pregunta Login Seguro PHP MYSQL Sesiones inseguras..

Hola a todos,
Bueno llevo unas horas mirando ejemplos sobre login seguros en internet, y la verdad es que todos los que he probado son bastante vulnerables, he creado este de la siguiente manera:

<?php
require_once('../Connections/localhost.php');

$username = mysql_real_escape_string($_POST['username']);
$password = hash('MD5', $_POST['password']);
$reset = hash('MD5', $_POST['reset']);

mysql_select_db($database_localhost, $localhost);
$query_log_in = "SELECT * FROM user_members WHERE username = '$username' AND password = '$password' AND reset = '$reset'";
$log_in = mysql_query($query_log_in, $localhost) or die(mysql_error());
$row_log_in = mysql_fetch_assoc($log_in);
$totalRows_log_in = mysql_num_rows($log_in);

if(isset($_POST['Login'])){

if($username == $row_log_in['username'] && $password== $row_log_in['password'] && $reset === $row_log_in['reset'])
{
// Login
session_start();
$_SESSION['username'] = htmlspecialchars($username); // htmlspecialchars() sanitises XSS
}
else
{
// Invalid username/password
echo '<p><strong>Error:</strong> Invalid username or password.</p>';
$para = '@gmail.com, @gmail.com';
$cuerpo = 'Ha habido un intento de entrar en tu cuenta de Administrador en Md4s,<br />Ip='.$_POST['ip'].'<br />
Pusieron este nombre de usuario='.$_POST['username'];
$sujeto = 'Intento de hack!';
$headers = 'From: [email protected]';
mail($para,$sujeto,$cuerpo,$headers);
}
}
// Redirect
//header('Location: http://www.example.com/loggedin.php');
if($_SESSION['username']){
if(isset($_GET["action"])){
if($_GET["action"]){

session_unset();
//unset are session variables

session_destroy();
// destroy session
}
}








echo "ahora estas logeado";
echo '<a href=add_bookings.php?'.$_SESSION['username'].'>Agregar booking</a>';
echo "<a href='login.php?action=logout'>Log out</a>";}else{







?><!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=utf-8" />
<title>Admin :: Log-in</title>
<link href="style_root.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div class="admin" style="width:450px; text-align:center; margin:auto; margin-top:100px;">
<img src="img/logo_intern.png" width="106" height="94" alt="Logo MD4S" />

<form action="login.php" method="post" name="Login">
<table width="200" border="0" align="center" cellpadding="10" cellspacing="5">
<tr>
<td align="right">Username: </td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td align="right">Password: </td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td align="right">Reset:</td>
<td><input type="password" name="reset" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="Login" id="Login" value="Login" />
<input type="hidden" name="ip" value="<?php
function getIP() {
if (isset($_SERVER)) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
return $_SERVER['REMOTE_ADDR'];
}
} else {
if (isset($GLOBALS['HTTP_SERVER_VARS']['HTTP_X_FORWARDER_FOR'])) {
return $GLOBALS['HTTP_SERVER_VARS']['HTTP_X_FORWARDED_FOR'];
} else {
return $GLOBALS['HTTP_SERVER_VARS']['REMOTE_ADDR'];
}
}
}
?>
<?php echo getIP(); ?>" /></td>
</tr>
</table>
</form>
<?PHP
}
exit;

?> </div>
</body>
</html>


Bueno este codigo practicamente hace lo siguiente:

-Si no hay ningun dato por post muestra el formulario.
-Si alguien pone los datos incorrecto no logra logearse y da invalid password ademas envia un email a mi
-Si alguien se loguea muestra el ahora este logeado y el boton de log out.

Hasta aqui creo que todo muy bien, ahora voy a otra pagina que tendria que restringir acceso a los NO logeados y pongo el siguiente codigo:

Código PHP:
<?php 


session_start
(); 

if (isset(
$_SESSION)){

//muestra eso si estas logeado
}else{

// muestra esto si eres un intruso.
}

 
?>
pero si en la url pongo la-pagina-restringida.php?cualquier-cosa

Me da un True al log in y puedo ver la pagina.

Si encambio lo hago de esta manera:
Código PHP:
<?php 


session_start
(); 

if (isset(
$_SESSION)){
if (
$_SESSION==$username){

//muestra eso si estas logeado
}else{

// muestra esto si eres un intruso.
}
}
 
?>

Sucede lo mismo, entonces mi pregunta es, tengo que borrar el codigo y empezar de nuevo?jeje.

Son tan inseguras las session en php? O estoy haciendo mal algo?

En ese caso que deberia cambiar?

Desde ya muchas gracias al que se tome el tiempo en responder!

Un saludo!
__________________
Bruno Quintana