Foros del Web » Programando para Internet » PHP »

La página PHP + segura del mundo!.

Estas en el tema de La página PHP + segura del mundo!. en el foro de PHP en Foros del Web. No coloco este POST en El "Foro de Seguridad", por que se trata de PHP Feliz semana, entre varios webmasters desarrollaron una aplicacion que envia ...
  #1 (permalink)  
Antiguo 26/01/2004, 07:39
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 20 años, 3 meses
Puntos: 0
Mensaje La página PHP + segura del mundo!.

No coloco este POST en El "Foro de Seguridad", por que se trata de PHP

Feliz semana, entre varios webmasters desarrollaron una aplicacion que envia mail, lo cual (al ser varios los programadores), dio como resultado un desarrollo muy versatil.
(Lamentablemente no pude volver ha hallar el post para citarlo.)

Yo no se nada de seguridad.
Si mi sitio web fuera hackeado, solo me daria cuenta despues de que saliera en la pagina principal un texto como "Aqui estuve yo, el hacker".

Creo que un hacker se ocuparia de hackear un sitio que valiera la pena, no sitios "inutiles"; pero aun asi, esta es la hora que yo no se si me han hackeado, ya que un hacker inteligente no ira a dañar sino a "robar" info de nuestro sitio, de nuestras BD, etc... (Es lo que creo yo).

//////////////////////////////////////////////////////////////

Aqui, en FDW he aprendido un poco de Bases de datos + PHP.

Lo que he aprendido quiero utilizarlo para hacer cosas interesantes en mi web, pero con bases de datos + PHP.

Asi que yo pienso:

"Uy!, le voy a permitir a cualesquier persona que ingrese a mis Bases de datos, que las lea, que las modifique, que borre, edite, etc...".

Y... si una de esas personas es "un Webmaster travieso"?

Me friego, por que (repito), no se como hacer sitios seguros.

Entonces como vi que entre varios Webmasters hicieron lo de la aplicacion mail(), yo les pido el favor a ustedes, los participantes de FOROS DEL WEB que entre varios creen una pagina PHP MUY SEGURA, la cual lee cosas de las BD.

Coloco aqui la forma en que actualmente lo hago, lo cual se que no es REAL SEGURIDAD:

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();

    
//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($clave)){$clave '';}
    if(!isset(
$accion)){$accion '';}
    if(!isset(
$intento)){$intento '';}

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

    
//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($intento 3)
    {
    
header("Location:
 [url]http://127.0.0.1[/url]"
);
    }
    
//Comprovamos la clave secreta:
    
if("miclavesecreta" === $clave)
    {
    
session_unregister("intento");
    
session_register("clave");
    echo 
"Bienvenido";
    
//Se continuan todas las acciones
    //Como por ejemplo:
    
echo "<A HREF='$PHP_SELF?accion=salir'>Salir</A>";
    }

    
//Si la clave es diferente:
    
else
    {
    
$intento++;
    
session_register("intento");
    echo 
"$intento <CENTER><FORM ACTION='$PHP_SELF'>Ingresa la clave:<BR>
<INPUT TYPE='PASSWORD' NAME='clave'> <INPUT TYPE=SUBMIT VALUE='Ingresar'>
</FORM></CENTER></BODY></HTML>"
;
    exit;
    }

?>
Y listo maestros, + que esto no se nada de nada +.

MUCHAS GRACIAS POR LA YUDA QUE NOS VRINDEN A LOS NEOFITOS.

De veras que es muy importante.

Última edición por CHAMO01; 26/01/2004 a las 09:43
  #2 (permalink)  
Antiguo 26/01/2004, 08:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo empezaría por ver más sobre sesiones.

El uso que haces de las variables de sesión con session_register() ya de por sí es inseguro y se abandonó su uso (pese que aun puedes usarlo) desde la versión de PHP 4.1.0 donde apareció los arrays superglobales $_SESSION (y sus afines para otros métodos como $_GET, $_POST .. etc). En las FAQ's de este foro tienes ejemplos.

Otro detalle que se vé a simple vista ..

Haces esto ..

if($intento > 3)
{
header("Location: http://127.0.0.1");
}

// más código PHP suceptible a ser ejecutado ..

Cuando usas header() con un "Location" .. PHP le dice al navegador que cambie la página que está viendo .. pero para llegar a ese punto .. tu script se ha ejecutado por completo, siendo que NO es así lo que realmente quieres sino que; "el navegador" cambie su página y llame a otro script tuyo/pagina (redireccione) y que tu script (PHP código) pare ahí mismo la ejecución ..

Para solventar eso .. usa exit; a continuación de un header("Location: ....");

Código PHP:
if($intento 3)
    {
    
header("Location: [url]http://127.0.0.1[/url]");
    exit;
    } 
El tema de como propagas el SID en la sesión .. deberías ver conocer que estás asumiendo que PHP lo va hacer de forma automatica (session.use_trans_sid).

Y recuerda usar los arrays superglobales $_GET .. $_POST en lugar de asumir las variables como globales .. Por ahí ya tienes un problema con la seguridad ..

Luego habría que ver la lógica en sí y probar las condiciones posibles para ver si "falla" la autentificación.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 26/01/2004, 08:41
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 20 años, 3 meses
Puntos: 0
Ya existe

Creo que esa página-tuttorial ya existe, (Verdad?).

Disculpenme por ser tan distraido.

Gracias Cluster, si debo leer +, pero ademas de que el tiempo no me ayuda mucho, me muero por subir mis "inseguras paginas" esta semana.

Creo que esta aqui la pagina ya lista para usar Y APRENDER:

http://phpcluster.host.sk/scripts/autentificator/

Cita:
Y recuerda usar los arrays superglobales $_GET .. $_POST en lugar de asumir las variables como globales ..
Maestro, no entiendo cual es la diferencia entre:

<INPUT TYPE=TEXT NAME=CORREO VALUE="<?php echo $mail"; ?>">

Y esta otra forma de imprimir:

<INPUT TYPE=TEXT NAME=CORREO VALUE="<?php echo $_GET['$mail']"; ?>">

Podria por favor indicarme las diferencia de GLOBALES Y SUPERGLOBALES.

Por que no utilizar $sam, y si utilizar $_GET['$sam'] ?

No lo comprendo, y el manual me gana por que es muy tecnico.

Gracias.

Última edición por CHAMO01; 26/01/2004 a las 09:17
  #4 (permalink)  
Antiguo 26/01/2004, 09:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. puedes tomar como ejemplo para comenzar en el tema de sesiónes y autentificación con mi script Autentificator. Pero, no te olvides de:

www.php.net/session donde aprenderas todo sobre configuración y otros detalles sobre las sesiones.

Un saludo,

PD: .. En estos momentos tengo problemas con el hosting que alberga dicho script .. El compañero jpinedo amablemente lo ha publicado en su web hasta que solvente los problemas que tengo.

Lo puedes descargar de:
http://jpinedo.webcindario.com
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 26/01/2004 a las 09:02
  #5 (permalink)  
Antiguo 26/01/2004, 13:00
 
Fecha de Ingreso: agosto-2003
Mensajes: 223
Antigüedad: 20 años, 7 meses
Puntos: 0
Desde mi punto de vista, no hay ciencia para evitar que un hacker consiga penetrar un sistema de usuarios o lo que sea.
Si queremos evitar que un hacker lea sus datos, el mejor metodo es que no los pueda ver (no sean visibles), y el otro es que para cualquier cambio de e-mail o contraseña se envie una confirmacion por e-mail.

De esta forma podemos evitar que el hacker pueda ver los datos de la persona o que cambie la contraseña.

Pero aun pueden hacer algo mas, si nuestro servidor no esta en PHP SEGURO pueden coger nuestras contraseñas de base de datos y meterse tan tranquilos.
Para eso, la cuenta de usuario utilizada deberia ser tan solo de leer o en todo caso, pedir al administrador del servidor que pasara a PHP SEGURO.

Saludos!
__________________
Me llaman Tuxiradical... porque tu no?
____________

Hay... maldito internet explorer, el tan contento vino y me mordio.
Gran hijo de su madre.
Menos mal que fui a www.mozilla.org y me descargue la vacuna.
____________
Mis scripts en php www.ethernalsoft.tk
  #6 (permalink)  
Antiguo 26/01/2004, 14:08
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

La pagina PHP mas segura es aquella que guardas en un diskette que metes en una caja fuerte y tiras las llaves a un estanque con pirañas

Bueno, ahora mas en serio. Si se puede hacer una sitio web seguro, con una combinacion de configuracion del servidor, configuracion de la conexion y buena programacion.

1.- Configuracion del servidor: Si el servidor donde alojamos la web no es seguro, por mucho que hagamos bien la programacion, siempre va a ser inseguro. Por ejemplo, en los alojamientos compartidos, si todos tienen acceso a la carpeta donde se almacenan las sesiones, todos podran ver los datos almacenados. Normalmente esta configuracion corresponde a los administradores del alojamiento.

2.- Configuracion de la conexion: Es mucho mas seguro realizar la conexion entre el cliente y el servidor mediante SSL, lo que implica tener alojada tu web en un servidor HTTPS. Con este protocolo, los datos entre el navegador y el servidor viajan encriptados.

3.- Buena programacion: Realizar una programacion robusta ayuda a la seguridad. Tener un codigo que sabes que no va a fallar, o que cuando falla, lo hace controladamente, es un seguro. Y la paranoia tambien ayuda. Comprobar el tipo y origen de los parametros externos, eliminar caracteres peligrosos, inicializar varaibles, etc. ayudan a evitar los ataques mas "basicos" (como el SQL inyection).

El manual tiene una seccion dedicada a la seguridad: http://www.php.net/manual/en/security.php

Y he dejado para lo ultimo la configuracion mas importante: la configuracion del usuario Todo sistema es tan seguro como su eslabon mas debil. Si tienes un usuario que da su informacion (login y pass) a cualquier email que parezca provenir de tu web, es una victima facil de la "ingenieria social".

Saludos.

PD: Sobre lo de $sam o $_GET['sam'], la diferencia es que $sam puede ser $_GET['sam'], $_POST['sam'], $_COOKIE['sam'], $_SESSION['sam'], $_ENV['sam'] o $_SERVER['sam']; mientras que $_GET['sam'] solo puede ser $_GET['sam']. Ten en cuenta que no hace falta ser muy habil para crear una peticion HTTP (como la que hace un navegador) preparada especialmente para "crackear" tu web.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 26/01/2004, 14:52
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 20 años, 3 meses
Puntos: 0
Te das cuenta Josemi, es que aunque uno tenga 50 manuales de PHP, si no tiene el buen Karma de toparse con un foro como este, y en especial con personas PACIENTES, y ESPECIALIZADAS como los moderadores de estos foros, (usted, y los demas), uno se tomaria 2 años para hacer una pagina insegura.

Tu ayuda sobre $_GET['$variable']

Es excelente, me ha quedado muy clara.

Gracias.

Pero tu dices:

1// combinacion de configuracion del servidor

2// configuracion de la conexion

//3 buena programacion

Uy!, sabes que utilizo un host compartido, como se si tengo acceso a la carpeta de sesiones que mencionas?

Solo hoy me desayuno que para SSL es el servidor quien tiene que estar SSL, yo pensaba que era un certificado que se compraba, (Osea una licencia acreditada por la empresa [X]) + IP dedicada, y un protoclo que me queda muy grande entender en estos momentos, (https://miweb.com).

Y entonces aunque el server este yo no se como, con ese certificado + la IP = sitio seguro.

Por tu explicacion deduzco que no es asi, sino que es TODO EL SERVER quien tiene que estar SSL.

***********************************

Tonces:

001 => La forma de saber que un server COMPARTIDO tiene seguridad es ¿? (Puede verse con phpinfo() ?, en que variable, en que dato?. )

002 => La conexion... Osea https, o se refiere a la conexion mysql_connect() ?

003 => El cómo se programe, osea en las que yo ando ahora, verdad?

Es decir:

De parte de quienes tenemos cuentas en servers compartidos, la unica opcion que nos queda es ESFORZARNOS EN LA PROGRAMACIÓN, por que tus puntos 1 y 2 Josemi salen de nuestras manos, cierto?.

Y buscar un proveedor que no permita acceso a la carpeta tmp, pero...

Sin bromear Maestro, eso como se pregunta?

"Uestedes permiten acceso a la carpeta tmp?", eso ya suena a hacker... no?.

Muchas gracias.
Me estan abriendo los ojitos, abranmelos otro poquito : )
  #8 (permalink)  
Antiguo 27/01/2004, 14:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, un buen punto para comenzar a evaluar la seguridad del alojamiento es mirando el valor de las directivas open_basedir y safe_mode, que evitan que podamos acceder a ficheros que estan fuera de nuestro espacio web.

Si no tienes problemas con el ingles, en http://www.owasp.org/index publicaron una guia con los errores de seguridad mas graves que se cometian al desarrollar sitios web.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 30/01/2004, 16:41
 
Fecha de Ingreso: enero-2004
Mensajes: 89
Antigüedad: 20 años, 3 meses
Puntos: 0
Maestro Josemi...

Como esperas que yo pueda somprendder esas palabras?.

Te pediria con total cortesia que me tengas paciencia, y me amplies esa información un poco eso.

El php.info del host que me alquilan dice:

safe_mode Off Off

Y tambien:

open_basedir no value no value

Pero como le digo, yo puedo entrar al directorio tmp, y ver, leer, borrar algunos files, pero nunca veo files del tipo:

sess_670e8ed62702cac7c7b69a2917614d9e

Entonces no se como interpretar que si tengo acceso al tmp, pero no veo files de SESSION

¿?

Muchas gracias.
  #10 (permalink)  
Antiguo 31/01/2004, 15:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El "tmp" que se refiere josemi es al /tmp .. es decir .. al directorio temporal de ese servidor que está -fuera- de tu directorio virtual asignado para tu sitio .. Si tu en tu sitio (entrando por FTP) tienes un "tmp" .. ese no es el "tmp" que usa PHP para guardar las sesiones. A ese directorio "tmp" tienen acceso "total" sólo (en teoría y así debiera ser) los administradores de ese servicio de hosting . .pero no tu ni otros usuarios compartidos de ese servidor. (aunque .. esa configuración se presta a que puedas hacer un "fopen" o "moverte" por toda la estructura de directorios de ese servidor con PHP).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 31/01/2004, 16:19
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Aparte, el directorio donde se almacenan las sesiones viene definido por la directiva session.save_path . Puede que en tu caso este configurado de otra forma.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:18.