Pequeña Intranet Casa Envio De Encomiendas

Iniciado por ANTRAX, Febrero 24, 2010, 11:45:10 AM

Tema anterior - Siguiente tema

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

Febrero 24, 2010, 11:45:10 AM Ultima modificación: Marzo 27, 2014, 06:13:48 PM por Expermicid
Bueno, este es un codigo que se los pongo a modo de ejemplo para que vayan viendo como es el tema y como se estructuran los sistemas. Claro esta que a este codigo le falta muchisimo, esto no lo pueden vender (nadie se los compraria), pero sirve como ejemplo y si los users lo desean lo ampliamos.
Saludos

index.php:
Código: php

<html>
<head>
<title>index</title>
<script type="text/javascript">

function validar() {
var valido=true;
var u = document.getElementById("user");
var p = document.getElementById("passw");
var errorU = document.getElementById("errorUser");
var errorP = document.getElementById("errorPassw"); 



if  (u.value=="") {
errorU.innerHTML=alert('!! Debe ingresar un Usuario !!');
errorU.innerHTML="*";
valido=false;
}
if  (p.value=="") {
errorP.innerHTML=alert('!! Debe ingresar un Password !!');
errorP.innerHTML="*";
valido=false;
}
return valido;

}
</script>
</head>

<body>

<?php

include("AccesoMysql.php");

if (isset($_POST['ingresar'])) {
session_start();
extract($_POST);

$acceso=new AccesoMysql();
$ok=$acceso->validaUsuario($user,$passw);
if($ok) {
$_SESSION['USER']=$user;
$_SESSION['PASSW']=$passw;
$_SESSION['TIPO']=$acceso->esAdministradorUsuario;
header("Location:listado_encomiendas.php");
exit;
} else {
echo '<script>alert("!! Usuario o Clave Incorrecta !!");</script>';
session_unset();
session_destroy();
}

if (trim($user)=="") {
$errorUser="*";
}
if (trim($passw)=="") {
$errorPass="*";
}
}


?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>"  method="post">

<table border="1" cellspacing="10" cellpadding="10" align="center">

<tr>
<td> Usuario </td>
<td> <input type="text"  maxlenght="100" name="user" id="user"/> </td>
<td style="color:red"> <span id="errorUser" style="color:#FF0000"></span><?php if(isset($errorUser)){echo $errorUser;}?> </td>
</tr>
<tr>
<td> Password </td>
<td>  <input type="password"  maxlenght="100" name="passw" id="passw" /> </td>
<td style="color:red"> <span id="errorPassw" style="color:#FF0000"></span> <?php if(isset($errorPass)){echo $errorPass;}?>  </td>
</tr>


</table>
</br>

<center> <input type="submit" value="Ingresar" name="ingresar" onClick="return validar()"  /> </center>
</form>




</body>
</html>


encomienda.php
Código: php

<html>
<head>
<title>encomienda</title>
<script type="text/javascript">

function validar1() {
var valido=true;
var co = document.getElementById("co");
var cd = document.getElementById("cd");
var ncr = document.getElementById("n_c_r");
var nce = document.getElementById("n_c_e");
var e = document.getElementById("estado");
var errorCO = document.getElementById("errorCO");
var errorCD = document.getElementById("errorCD");
var errorNCR = document.getElementById("errorNCR");
var errorNCE = document.getElementById("errorNCE"); 
var errorE = document.getElementById("errorE");


if  (co.value=="") {
errorCO.innerHTML=alert('!! Debe ingresar Ciudad de origen !!');
errorCO.innerHTML="*";
valido=false;
}
if  (cd.value=="") {
errorCD.innerHTML=alert('!! Debe ingresar Ciudad de destino !!');
errorCD.innerHTML="*";
valido=false;
}
if  (ncr.value=="") {
errorNCR.innerHTML=alert('!! Debe ingresar Nombre y Cedula (Receptor) !!');
errorNCR.innerHTML="*";
valido=false;
}
if  (nce.value=="") {
errorNCE.innerHTML=alert('!! Debe ingresar Nombre y Cedula (Emisor) !!');
errorNCE.innerHTML="*";
valido=false;
}
if  (e.value=="0") {
errorE.innerHTML=alert('!! Debe ingresar un Estado !!');
errorE.innerHTML="*";
valido=false;
}
return valido;

}
</script>
</head>

<body>

<?php
session_start();
if(isset($_SESSION['USER']) && isset($_SESSION['PASSW'])){
include("AccesoMysql.php");
$acceso=new AccesoMysql();
$valido=$acceso->validaUsuario($_SESSION['USER'],$_SESSION['PASSW']);
if(!$valido){
session_unset();
session_destroy();
header("Location:index0.php");
exit;
}
       
}
else {
session_unset();
session_destroy();
header("Location:index0.php");
exit;

}

if (isset($_POST ["crear"])) {
extract($_POST);
if (trim($co)=="") {
$errorCiudadO="*";
}
if (trim($cd)=="") {
$errorCiudadD="*";
}
if (trim($n_c_r)=="") {
$errorNomCedRe="*";
}
if (trim($n_c_e)=="") {
$errorNomCedEm="*";
}
if (trim($estado)=="0") {
$errorEstado="*";
}
if ((trim($co)!="") && (trim($cd)!="") && (trim($n_c_r)!="") && (trim($n_c_e)!="") && (trim($estado)!="0")) {
$users=$acceso->CrearEncomienda();
}
}
if (isset($_POST ["eliminar"])) {
$users=$acceso->EliminaEncomienda();
}

?>




<h1> <strong> <p align="center"> Datos Encomienda </p> </strong> </h1>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>"  method="post">

<table border="1" cellspacing="10" cellpadding="10" align="center">
<tr>
<td> Ciudad origen </td>
<td> <input type="text" maxlenght="100" name="ciudad_o" id="co" /> </td>
<td style="color:red"> <span id="errorCO" style="color:#FF0000"></span> <?php if(isset($errorCiudadO)){echo $errorCiudadO;}?>  </td>
</tr> 
<tr>
<td> Ciudad destino </td>
<td>  <input type="text" maxlenght="100" name="ciudad_d" id="cd"  /> </td>
<td style="color:red"> <span id="errorCD" style="color:#FF0000"></span> <?php if(isset($errorCiudadD)){echo $errorCiudadD;}?> </td>
</tr>
<tr>
<td> Nombre y Cedula (Receptor) </td>
<td>  <input type="text" maxlenght="100" name="n_c_r" id="n_c_r"  /> </td>
<td style="color:red"> <span id="errorNCR" style="color:#FF0000"></span> <?php if(isset($errorNomCedRe)){echo $errorNomCedRe;}?> </td>
</tr>
<tr>
<td> Nombre y Cedula (Emisor) </td>
<td>  <input type="text" maxlenght="100" name="n_c_e" id="n_c_e"  /> </td>
<td style="color:red"> <span id="errorNCE" style="color:#FF0000"></span> <?php if(isset($errorNomCedEm)){echo $errorNomCedEm;}?> </td>
</tr>
<tr>
<td> Estado </td>
<td> <select name="estado" id="estado">

<option value="0" selected="selected"> [seleccione un estado] </option>
<option value="pendiente"> Pendiente</option>
<option value="despachada"> Despachada </option>


</select>
</td><td style="color:red"> <span id="errorE" style="color:#FF0000"></span> <?php if(isset($errorEstado)){echo $errorEstado;}?> </td>
</tr>
</table>
</br>

<center> <input type="submit" value="Crear" name="crear" onClick="return validar1()"  /> <input type="submit" value="Eliminar" name="eliminar" onClick="return validar1()" /> </center>
</form>

</body>
</html>


listado_encomienda.php:

Código: php

<html>
<head>
<title>listado_encomiendas</title>
</head>

<body>

<?php
session_start();
if(isset($_SESSION['USER']) && isset($_SESSION['PASSW'])){
include("AccesoMysql.php");
$acceso=new AccesoMysql();
$valido=$acceso->validaUsuario($_SESSION['USER'],$_SESSION['PASSW']);
if(!$valido){
session_unset();
session_destroy();
header("Location:index0.php");
exit;
}
       
}
else {
session_unset();
session_destroy();
header("Location:index0.php");
exit;

}

$users=$acceso->mostrarEncomiendas();
?>
<br/>
<center>  <input type="submit" value="Crear" name="crear" onClick="window.open('encomienda.php')" /> </center>
</body>
</html>


usario.php:

Código: php

<html>
<head>
<title>usuario</title>
<script type="text/javascript">


/*Para despues confirmar la eliminacion
function opcion() {
ventana=confirm("¿Esta seguro desea eliminarlo?");
if (ventana) {
alert("Has seleccionado 'Aceptar'");
}
else {
alert("Has seleccionado 'Cancelar'");
document.form1.action ='usuario.php';
}
}
*/


function validar2() {
var valido=true;
var n = document.getElementById("nombre");
var c = document.getElementById("clave");
var t = document.getElementById("tipo");
var errorN = document.getElementById("errorN");
var errorC = document.getElementById("errorC");
var errorT = document.getElementById("errorT"); 



if  (n.value=="") {
errorN.innerHTML=alert('!! Debe ingresar un Nombre !!');
errorN.innerHTML="*";
valido=false;
}
if  (c.value=="") {
errorC.innerHTML=alert('!! Debe ingresar un Password !!');
errorC.innerHTML="*";
valido=false;
}
if  (t.value=="0") {
errorT.innerHTML=alert('!! Debe seleccionar un tipo !!');
errorT.innerHTML="*";
valido=false;
}
return valido;

}
</script>
</head>

<body>

<?php
include("AccesoMysql.php");
$acceso=new AccesoMysql();
session_start();
if(isset($_SESSION['USER']) && isset($_SESSION['PASSW']) && isset($_SESSION['TIPO'])){

include("AccesoMysql.php");
$acceso=new AccesoMysql();
$valido=$acceso->validaUsuario($_SESSION['USER'],$_SESSION['PASSW']);
if($valido){
$tipo=$acceso->esAdministradorUsuario($_SESSION['USER']);
if(!$tipo){
session_unset();
session_destroy();
header("Location:index0.php");
exit;

}
       
}else{
session_unset();
session_destroy();
header("Location:indexO.php");
exit;
}
}

if (isset($_POST ["crear"])) {
extract($_POST);
if (trim($nombre)=="") {
$errorNombre="*";
}
if (trim($clave)=="") {
$errorClave="*";
}
if (trim($tipo)=="0") {
$errorTipo="*";
}
if ((trim($nombre)!="") && (trim($clave)!="") && (trim($estado)!="0")) {
$users=$acceso->CrearUser();
}
}
if (isset($_POST ["eliminar"])) {
$users=$acceso->EliminaUser();
}

?>



<h1> <strong> <p align="center"> Ingreso de Datos </p> </strong> </h1>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>"  method="post">

<table border="1" cellspacing="10" cellpadding="10" align="center">
<tr>
<td> Nombre </td>
<td> <input type="text" maxlenght="100" name="nombre" id="nombre" /> </td>
<td style="color:red"> <span id="errorN" style="color:#FF0000"></span> <?php if(isset($errorNombre)){echo $errorNombre;}?>  </td>
</tr> 
<tr>
<td> Password </td>
<td>  <input type="text" maxlenght="100" name="clave" id="clave"  /> </td>
<td style="color:red"> <span id="errorC" style="color:#FF0000"></span> <?php if(isset($errorClave)){echo $errorClave;}?> </td>
</tr>
<tr>
<td> Tipo de usuario </td>
<td> <select name="tipo" id="tipo">

<option value="0" selected="selected"> [seleccione un tipo] </option>
<option value="admin" > Administrador</option>
<option value="recep"> Recepcionista </option>


</select>
</td><td style="color:red"> <span id="errorT" style="color:#FF0000"></span> <?php if(isset($errorTipo)){echo $errorTipo;}?> </td>
</tr>
</table>
<br/>
<center>  <input type="submit" value="Crear" name="crear" onClick="return validar2()" /> <input type="submit" value="Eliminar" name="eliminar"  onClick="return validar2()"   /> </center>
</form>

</body>
</html>


listado_usuarios.php:
Código: php

<html>
<head>
<title>listado_usuarios</title>

</head>

<body>
<?php
include("AccesoMysql.php");
$acceso=new AccesoMysql();
session_start();
if(isset($_SESSION['USER']) && isset($_SESSION['PASSW']) && isset($_SESSION['TIPO'])){

include("AccesoMysql.php");
$acceso=new AccesoMysql();
$valido=$acceso->validaUsuario($_SESSION['USER'],$_SESSION['PASSW']);
if($valido){
$tipo=$acceso->esAdministradorUsuario($_SESSION['USER']);
if(!$tipo){
session_unset();
session_destroy();
header("Location:index0.php");
exit;

}
       
}else{
session_unset();
session_destroy();
header("Location:indexO.php");
exit;
}
}


?>

<h1> <strong> <p align="center"> Lista de Usuarios </p> </strong> </h1>

<table border="1" cellspacing="10" cellpadding="10" align="center">
<tr>
<td> Usuario </td>
<td> Tipo </td>
</tr>
<tr>

<td> <?php $users=$acceso->mostrarUsuarios(); ?>  </td>
<td> <?php $users=$acceso->mostrarTipoUser(); ?>  </td>
<td> <?php $users=$acceso->BotonModificarUser(); ?>  </td>
<td> <?php $users=$acceso->BotonEliminaUser(); ?>  </td>

</tr>
</table>

<br/>
<br/>


<center>  <input type="button" value="Crear" name="crear" onClick="window.open('usuario.php')" >
</center>



</body>
</html>


AccesoMysql.php:

Código: php

<?php

class AccesoMysql {
    const SERVER = "localhost";
    const BASE = "usuarios";
    const USER = "admin";
    const PASSWD = "admin";

    private function conexion(){
    $con = mysql_connect(self::SERVER,self::USER,self::PASSWD);
    if($con){
    mysql_select_db(self::BASE,$con);
    }else{
    $con=false;
    }

    return $con;
    }

public function validaUsuario($user,$passw){
$valido=false;
$con= $this->conexion();
if($con){
$sql= mysql_query("SELECT * FROM usuarios WHERE nombre='$user' and clave=MD5($passw)",$con);
if($sql && mysql_num_rows($sql)!=0){
$valido=true;
}else{
$valido=false;
}
mysql_close($con);
}
return $valido;
}

public function esAdministradorUsuario($user){
$es_adim=false;
$con= $this->conexion();
if($con){
  $sql=mysql_query("SELECT * FROM usuarios WHERE nombre='$user' and tipo='$admin'",$con);
if($sql && mysql_num_rows($sql)!=0){
$es_admin=true;
}else{
$es_admin=false;
}
mysql_close($con);
}
return $es_admin;
}

public function mostrarUsuarios(){

$con= $this->conexion();
if($con){
$sql=mysql_query ("SELECT * FROM usuarios ORDER BY nombre",$con);
if ($sql){
while ($fila=mysql_fetch_array($sql)){

echo "<center>"."<u>".$fila['nombre']."</u>"."</center>"; 

}
}
mysql_close($con);
}
}

/*public function mostrarClaves(){

$con= $this->conexion();
if($con){
$sql=mysql_query ("SELECT * FROM usuarios ORDER BY nombre",$con);
if ($sql){
while ($fila=mysql_fetch_array($sql)){

echo "<center>"."<u>".$fila['clave']."</u>"."</center>"; 

}
}
mysql_close($con);
}
}*/

public function mostrarTipoUser(){

$con= $this->conexion();
if($con){
$sql=mysql_query ("SELECT * FROM usuarios ORDER BY nombre",$con);
if ($sql){
while ($fila=mysql_fetch_array($sql)){

echo "<center>"."<u>".$fila['tipo']."</u>"."</center>"; 

}
}
mysql_close($con);
}
}

public function BotonModificarUser(){

$con= $this->conexion();
if($con){
$sql=mysql_query ("SELECT * FROM usuarios ORDER BY nombre",$con);
if ($sql){
while ($fila=mysql_fetch_array($sql)){

echo "<center>"."<u>".$fila['']."</u>"."</center>"; 
?> <input type="button" value="Modificar" name="modificar" onclick="window.open('usuario.php')" > <?php
}
}
mysql_close($con);
}
}

public function BotonEliminaUser(){

$con= $this->conexion();
if($con){
$sql=mysql_query ("SELECT * FROM usuarios ORDER BY nombre",$con);
if ($sql){
while ($fila=mysql_fetch_array($sql)){

echo "<center>"."<u>".$fila['']."</u>"."</center>"; 
?> <input type="button" value="Eliminar" name="eliminar" onclick="window.open('usuario.php')" > <?php
}
}
mysql_close($con);
}
}

public function mostrarEncomiendas(){

$con= $this->conexion();
if($con){
$sql=mysql_query ("SELECT * FROM encomiendas ORDER BY ciudad_origen",$con);
if ($sql){
while ($fila=mysql_fetch_array($sql)){
echo "<center>".$fila['ciudad_origen']."-".$fila['ciudad_destino']."-".$fila['cedula_receptor']."-".$fila['cedula_emisor']."-".$fila['estado']."<br/>"."</center>";
?> <center> <input type="button" value="Despachar" name="despachar" onclick="" > <input type="button" value="Eliminar" name="eliminar" onclick="" > </center> <?php
}
}
mysql_close($con);
}

}

public function CrearUser () {

$con= $this->conexion();
if($con){
extract($_POST);
$sql=mysql_query ("INSERT INTO usuarios (nombre,clave,tipo) VALUES ('$nombre',MD5($clave),'$tipo')",$con);
$filas_afectadas=mysql_affected_rows($con);
echo "Se ingreso $filas_afectadas usuarios con exito";
mysql_close($con);
}

}

public function EliminaUser () {

$con= $this->conexion();
if($con){
extract($_POST);
$sql=mysql_query ("DELETE FROM usuarios WHERE nombre='$nombre' and clave=MD5($clave)",$con);
$filas_afectadas=mysql_affected_rows($con);
echo "Se eliminaron $filas_afectadas usuarios con exito";
mysql_close($con);
}

}

public function CrearEncomienda () {

$con= $this->conexion();
if($con){
extract($_POST);
$sql=mysql_query ("INSERT INTO encomiendas (ciudad_origen,ciudad_destino,cedula_receptor,cedula_emisor,estado) VALUES ('$ciudad_o','$ciudad_d','$n_c_r','$n_c_e','$estado')",$con);
$filas_afectadas=mysql_affected_rows($con);
echo "Se ingreso $filas_afectadas encomiendas con exito";
mysql_close($con);
}

}

public function EliminaEncomienda () {

$con= $this->conexion();
if($con){
extract($_POST);
$sql=mysql_query ("DELETE FROM encomiendas WHERE ciudad_origen='$ciudad_o' and ciudad_destino='$ciudad_d'",$con);
$filas_afectadas=mysql_affected_rows($con);
echo "Se eliminaron $filas_afectadas encomiendas con exito";
mysql_close($con);
}

}
}
?>


Estas Son algunas de las Vulnerabilidades y Errores que deberiamos corregir para que el sistema funcione correctamente:

1- El sitio entero es vulnerable a ataques de inyecciones SQL en el caso de no estar habilitada la opcion "Magic gpg quotes" en la configuracion de PHP. Se deberia controlar la seguridad por codigo.
Nota: El mismo sitio de PHP NO recomienda activar la opcion magic quotes, asi que esto siempre se deberia controlar por codigo. Magic quotes parece que va a desaparecer en las proximas versiones de PHP.

2- El sitio entero es vulnerable a ataques XSS (Cross Site Scripting).

3- El sitio no dispone de un enlace o boton para des-loguearse del sistema, o sea que cierre la sesion del usuario actualmente logueado.

4- La navegacion del sitio tiene errores, cuando modifico un usuario y luego voy al enlace para listar los usuarios desaparece la botonera, ademas se elimina el usuario que quise modificar.

5- No se controla el ingreso de un usuario ya existente.

6- La capa de persistencia no debe comunicarse directamente con el usuario, es decir que no deberia mostrar nada en pantalla, ni siquiera los "alert" de javascript.

7- Se esta posteando a la capa de acceso a datos (al archivo AccesoMysql.php):
Las funciones:  "public function EliminarEncomienda()",
                               "public function modificarUsuario()",
                               "public function EliminarUser()",
                               "public function CrearUser ()",
                               "public function CrearEncomienda ()",
                               "public function EliminaEncomienda ()"
deberian aceptar parametros como lo hace la funcion: "public function validaUsuario($user,$passw)", en vez de postearles los datos.

El codigo fuente de arriba es todo funcional, falta solo la base de datos. La cual ustedes deberian crear en su localhost para que todo funcione ok.

Si alguien quiere arreglar el codigo fuente: bienvenido!. Yo no tengo tiempo, :S .