Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/02/2004, 10:09
CHAMO01
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 20 años, 10 meses
Puntos: 0
Cómo mejorar la seguridad de esta página?.

Feliz semana, a quien pueda interesar "la historia completa", puede ver este post:

http://www.forosdelweb.com/showthrea...gura+del+mundo

Y hay este link para quienes esten interesados:

http://www.forosdelweb.com/showthrea...gura+del+mundo

Con las indicaciones recibidas allí, he "mejorado" la página/script de esta forma:

En la session se guardan unas variables de las cuales depende los accesos.
Las variables de session solo son registradas si el acceso $_POST['variable'] contiene el valor correcto
La seguridad depende 100% del valor registrado en las 2 variables de session:

"esteserdelespacio" y "lapersonaesvalida"

Finalmente lo unico que se me ocurre es COPIAR (y pegar) las cabeceras sugeridas por CLUSTER:

// No almacenar en el cache del navegador esta página.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Expira en fecha pasada
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Siempre página modificada
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0

##################################3

01 // Podria un hacker reescribir los archivos de session?
02 // A + variables de session utilizadas en el condicional de acceso mayor seguridad?
03 // Como puedo hacer este condicional:

if(**** la variable **** $_POST['pasword'] **** viene de la pagina hopedada en: http://misitio.com/directoriodepagin...avalida.php*** )
{
entonces procese
}
else
{
mail("[email protected]","Me intentan fregar","El dia tal desde $REMOTE_ADDR intentan hackearme";
header('Location: http://www.google.com/');
exit;
}
04 // Es inapropiado:

Código PHP:
 $_SESSION['ip_quepuedeutilizar_estapagina'] = $REMOTE_ADDR
Código PHP:
 (if($_SESSION['ip_quepuedeutilizar_estapagina'] != $REMOTE_ADDR... // (LA ACTUAL IP) 
Es decir, en la linea 58 (que se egecuta solo una vez) agregar:


Código PHP:
 $_SESSION['ip_quepuedeutilizar_estapagina'] = $REMOTE_ADDR
y continuar validando esa variable en la linea 48 asi:

Código PHP:
 if($_SESSION['esteserdelespacio'] != 'es_aceptado') OR $_SESSION['ip_quepuedeutilizar_estapagina'] != $REMOTE_ADDR 
O es obtusa esa idea?.

--------------------------------------------------------

GRACIAS!.

Este es el script:


Código PHP:
<?php

    
//Primero creamos el nombre de la session:
    
session_name("paginasegura");
    
//(Sinceramente no se de que sirve hacerlo, si por defecto existe: PHPSESSID).

    //Segundo la solicitamos
    
session_start();

    
$inicio "<CENTER><FORM ACTION='$PHP_SELF' METHOD='POST'>Ingresa la clave: (<BR><INPUT TYPE='PASSWORD' NAME='clave'> <INPUT TYPE=SUBMIT VALUE='Ingresar'></FORM></CENTER></BODY></HTML>";
    
$laclavesecreta 'fdw';

    
//Para evitar avisos en caso de que trabajemos con [ error_reporting=E_ALL ]
    //Iniciamos las variables $clave, $intento y $accion como cadenas vacias:

    
if(!isset($_SESSION['esteserdelespacio']))
    {
    
$_SESSION['esteserdelespacio'] = '';
    
$_SESSION['lapersonaesvalida'] = '';
    echo 
$inicio;
    exit;
    }

    if(!isset(
$accion)){$accion '';}
    if(!isset(
$intento)){$intento '';}
    if(!isset(
$_POST['clave'])) {$_POST['clave'] = '';}

    
/*
    Aplicamos 2 funciones sobre la variable para quitarle cualesquier
    caracter maligno como: $_POST['clave']='<?php include("file_x.php"); ?>'
    Creo que debe hacese = con todo lo que envie el usuario
    + vale prevenir...
    */
    
    
$_POST['clave'] = trim($_POST['clave']);
    
$_POST['clave'] = htmlentities($_POST['clave']);

    
//Salimos de la session si es lo que se desea
    //Y destruimos todos los datos almacenados en la session:
    
if("salir" === "$accion")
    {
    
$_SESSION = array();
    
session_destroy();
    echo 
$inicio;
    exit;
    }

    if(
$_SESSION['esteserdelespacio'] != 'es_aceptado')
    {
    
//Comprovamos la clave secreta:
    //Si es valida, registramos la session:
    
if($laclavesecreta === $_POST['clave'])
    {
    unset(
$_SESSION['intento']);
    
$_SESSION['esteserdelespacio'] = 'es_aceptado';
    
//Y tambien una variable secreta que es desconocida para el usuario:
    //La cual sera REQUERIDA para la validacion:
    
$_SESSION['lapersonaesvalida'] = 'parecequesi';
    echo 
"Bienvenido";
    
//Se continuan todas las acciones
    //Como por ejemplo:
    
echo "<A HREF='$PHP_SELF?accion=salir'>Salir</A>";
    }
    else
    {
    
//Si la persona se equivoca + de 3 veces, lo + probable es que sea un hacker
    //Entonces dejamos la cookie en la PC de la persona, y la sacamos de nuestro sitio web
    
if(isset($_SESSION['intento']))
    {
    if(
$_SESSION['intento'] > 3)
    {
    
header("Location: [url]http://127.0.0.1[/url]");
    exit;
    }
    }

    
$intento++;
    
$_SESSION['intento'] = $intento;
    
$losintentos $_SESSION['intento'];
    echo 
"$losintentos $inicio";
    exit;
    }
    }
    
    else
    {
    echo 
"Bienvenido";
    
//Se continuan todas las acciones
    //Como por ejemplo:
    
echo "<A HREF='$PHP_SELF?accion=salir'>Salir</A>";
##
##    O bien podriamos redirigir a la persona a otras paginas con:
##    header("Location: paginas_solo_para_usuarios.php");
##    exit;
##         ##    colocando al inicio de cada una de ellas:
##    include("estapagina.php");
##         
    
}

?>
GRACIAS NUEVAMENTE.

Si acaso a alguien le llega a servir este script, me gustaria saberlo, APENAS COMIENZO EN PHP, y seria muy estimulante pensar que en algo a alguien le ha servido el jijuemadre.

Salu2!.

Última edición por CHAMO01; 07/02/2004 a las 10:13