Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/04/2009, 01:51
chefnelone
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Respuesta: Se puede agregar algo mas en cuestion de seguridad?

Ok.

Recuerden que es muy pobre en cuanto a seguridad y la idea es mejorarla.
Lo digo para que no se tome como un código que puede usarse como está ahora


El sistema tiene 5 archivos y vamos a necesitar crear una base de datos (sql) con una tabla:

1- Base de Datos: aquí se guardan los datos de los usuarios registrados.
2- index.php (página donde se ingresa usuario y contraseña para el ingreso)
3- regisiter.php (página donde el usuario se registra con nombre de usuario y contraseña)
4- logout.php (necesario para finalizar una sesión de forma segura)
5- secured/mysql.php (donde se guardan los datos de conección a la base de datos. Este archivo está dentro de la carpeta 'secure')
6- secured/.htaccess (para proteger el contenido de la carpeta 'secured')

nota: 'index.php', 'register.php', 'logout.php' y la carpeta 'secured' están en el mismo nivel. Luego la carpeta 'secured' contiene: 'mysql.php' y '.htaccess'.


1- Base datos (codigo para crearla)

Creamos la base de datos con nombre 'membership'. Luego creamos la tabla 'users' con el siguiente código:
Código:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE `users` (
  `UserID` int(25) NOT NULL auto_increment,
  `Username` varchar(65) NOT NULL,
  `Password` varchar(32) NOT NULL,
  `EmailAddress` varchar(255) NOT NULL,
  PRIMARY KEY  (`UserID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
2 index.php
Código:
<?php include "secured/mysql.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<title>User Management System (Tom Cameron for NetTuts)</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>  
<body>  
<div id="main">
<?php
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username']))
{
	 ?>
    
    <h1>Area Privada</h1>
  	 <p>Hola! <?=$_SESSION['Username']?>. Your email address is <b><?=$_SESSION['EmailAddress']?>.</p>
    
    <ul>
        <li><a href="logout.php">Cerrar Area Privada</a></li>
    </ul>
    
    <?php
}
elseif(!empty($_POST['username']) && !empty($_POST['password']))
{


	$username = stripslashes($_POST['username']);
    $password = stripslashes($_POST['password']);
    
	$username = mysql_real_escape_string($username);
    $password = md5(mysql_real_escape_string($password));
    
	$checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."' LIMIT 1");
    
    if(mysql_num_rows($checklogin) == 1)
    {
    	 $row = mysql_fetch_array($checklogin);
        $email = $row['EmailAddress'];
        
        $_SESSION['Username'] = $username;
        $_SESSION['EmailAddress'] = $email;
        $_SESSION['LoggedIn'] = 1;
        
    	 echo "<h1>Success</h1>";
        echo "<p>Lo estamo redirigiendo a un Area Privada.</p>";
        echo "<meta http-equiv='refresh' content='=2;index.php' />";
    }
    else
    {
    	 echo "<h1>Error</h1>";
        echo "<p>Lo sentimos, su cuenta no ha sido encontrada. <a href=\"index.php\">clic aqu&iacute; para intentarlo de nuevo</a>.</p>";
    }
}
else
{
	if($_POST['sent']){if(empty($_POST['username']) || empty($_POST['password'])){$mensaje="Debe ingresar su nombre de usuario y contrase&ntilde;a";}}else{$mensaje="Ingrese su nombre de usuario y contrase&ntilde;a";}

	?>
    
   <h1>Acceso Privado</h1>
    
   <p><?php echo $mensaje; ?> o <a href="register.php">reg&iacute;strese</a>.</p>
    
	<form method="post" action="index.php" name="loginform" id="loginform">
	<fieldset>
		<label for="username">Usuario:</label><input type="text" name="username" id="username" /><br />
		<label for="password">Contrase&ntilde;a:</label><input type="password" name="password" id="password" /><br />
		<input type="hidden" name="sent" value="sent" />
		<input type="submit" name="login" id="login" value="Ingresar" />
	</fieldset>
	</form>
    
   <?php
}
?>
</div>
</body>
</html>
3- register.php
Código:
<?php include "secured/mysql.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<title>User Management System (Tom Cameron for NetTuts)</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>  
<body>  
<div id="main">
<?php
if(!empty($_POST['username']) && !empty($_POST['password']))
{
	$username = mysql_real_escape_string($_POST['username']);
    $password = md5(mysql_real_escape_string($_POST['password']));
    $email = mysql_real_escape_string($_POST['email']);
    
	 $checkusername = mysql_query("SELECT * FROM users WHERE Username = '".$username."'");
     
     if(mysql_num_rows($checkusername) == 1)
     {
     	echo "<h1>Error</h1>";
        echo "<p>Sorry, that username is taken. Please go back and try again.</p>";
     }
     else
     {
     	$registerquery = mysql_query("INSERT INTO users (Username, Password, EmailAddress) VALUES('".$username."', '".$password."', '".$email."')");
        if($registerquery)
        {
        	echo "<h1>Success</h1>";
        	echo "<p>Your account was successfully created. Please <a href=\"index.php\">click here to login</a>.</p>";
        }
        else
        {
     		echo "<h1>Error</h1>";
        	echo "<p>Sorry, your registration failed. Please go back and try again.</p>";    
        }    	
     }
}
else
{
	?>
    
   <h1>Register</h1>
    
   <p>Registro</p>
    
	<form method="post" action="register.php" name="registerform" id="registerform">
	<fieldset>
		<label for="username">Usuario:</label><input type="text" name="username" id="username" /><br />
		<label for="password">Contraseña:</label><input type="password" name="password" id="password" /><br />
        <label for="email">Email:</label><input type="text" name="email" id="email" /><br />
		<input type="submit" name="register" id="register" value="Register" />
	</fieldset>
	</form>
    
   <?php
}
?>
</div>
</body>
</html>
4- logout.php
Código:
<?php include "secured/mysql.php"; 
$_SESSION = array(); 
session_destroy(); 
?>
<meta http-equiv="refresh" content="0;index.php">
5- mysql.php
Código:
<?php
session_start();

$dbhost = "localhost"; // comprueba si es tu caso
$dbname = "membership"; // el nombre de la base de datos
$dbuser = "########"; // el username para acceder a tu base de datos
$dbpass = "**********"; // la contraseña para acceder a tu base de datos

mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());
mysql_select_db($dbname) or die("MySQL Error: " . mysql_error());
?>
6- .htaccess
Código:
deny from all
Saludos

Última edición por chefnelone; 03/04/2009 a las 03:31