Foros del Web » Programando para Internet » PHP »

Proteger inicio de sesión remota

Estas en el tema de Proteger inicio de sesión remota en el foro de PHP en Foros del Web. Buenas Me gustaría poder proteger la llamada de ciertos scripts de forma remota. Hasta ahora estoy usando el siguiente código para evitar que el script ...
  #1 (permalink)  
Antiguo 25/11/2010, 12:00
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Proteger inicio de sesión remota

Buenas

Me gustaría poder proteger la llamada de ciertos scripts de forma remota.

Hasta ahora estoy usando el siguiente código para evitar que el script se llame de forma directa.

Código PHP:
Ver original
  1. if (($_SERVER['HTTP_REFERER'] == ""){
  2.     die (Header ("Location: /404"));
  3.     exit;
  4. }

Sin embargo, no es que sea muy seguro, ya que el usuario puede poner un enlace en su web con un link directo al script y se saltaría esta validación.

Lo he hecho así, he mirado las variables del $_SERVER y no he visto muchas mas opciones que me sirvieran, en el ejemplo de tener el enlace en otra página externa al sitio estas variables no me ofrecen información que pueda discriminar (para detectar que se está haciendo una llamada directa desde un sitio que no es el que toca)

[HTTP_HOST]
[SERVER_NAME]
[REQUEST_URI]
[SCRIPT_NAME]
[PHP_SELF]

solo quedan
[SERVER_ADDR]
[REMOTE_ADDR]

no?

Cómo lo hacéis vosotros? alguna sugerencia?

Luego también tengo el siguiente código para saber de donde vino la llamada para devolver los errores a dicha página, no sé como lo véis.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];


Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 25/11/2010, 13:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Proteger inicio de sesión remota

si el acceso remoto solo proviene de un sitio es simple, solo compara el referer...
Código PHP:
if (strpos($pagina_referida'www.sitio-permitido.com') !== FALSE// OK 
la idea es sencilla, y dudo que alguien adivine las condiciones necesarias para entrar...

otra idea sería leer las cabeceras de petición, y claro, desde el cliente enviar un tipo de cabecera especial para que todo funcione ad-hoc...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 25/11/2010, 13:37
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Proteger inicio de sesión remota

Cita:
Iniciado por pateketrueke Ver Mensaje
si el acceso remoto solo proviene de un sitio es simple, solo compara el referer...
Código PHP:
if (strpos($pagina_referida'www.sitio-permitido.com') !== FALSE// OK 
la idea es sencilla, y dudo que alguien adivine las condiciones necesarias para entrar...

otra idea sería leer las cabeceras de petición, y claro, desde el cliente enviar un tipo de cabecera especial para que todo funcione ad-hoc...
Pero el referer es una de las cosas mas fáciles de suplantar, por ejemplo usando CURL

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.example.com/1');
$html = curl_exec($ch);

La IP sería mejor en este caso? o también podrían suplantarla? xD
  #4 (permalink)  
Antiguo 25/11/2010, 14:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Proteger inicio de sesión remota

Cita:
Iniciado por neodani Ver Mensaje
Pero el referer es una de las cosas mas fáciles de suplantar, por ejemplo usando CURL

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.example.com/1');
$html = curl_exec($ch);

La IP sería mejor en este caso? o también podrían suplantarla? xD
claro, entiendo lo que dices... pero, en dado caso ¿quien va a adivinar el referer exacto de entrada a tu aplicación?

por eso decía que al igual que el referer -que es un cabecera- puedes crear otra con un valor que solo tu vas a saber, y obviamente solo el script que envie dicha cabecera podrá entrar a tu sistema...

¿si se entiende lo que quiero decir?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 25/11/2010, 16:09
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Proteger inicio de sesión remota

Cita:
Iniciado por pateketrueke Ver Mensaje
claro, entiendo lo que dices... pero, en dado caso ¿quien va a adivinar el referer exacto de entrada a tu aplicación?

por eso decía que al igual que el referer -que es un cabecera- puedes crear otra con un valor que solo tu vas a saber, y obviamente solo el script que envie dicha cabecera podrá entrar a tu sistema...

¿si se entiende lo que quiero decir?
No sé como aplicar el ejemplo al caso práctico del login.
Durante toda la navegación de la web en la cabecera está el formulario de login, si el usuario rellena los datos y pulsa el boton ENTRAR, como envías la cabecera personalizada? esa cabecera personalizada no la puede ver el usuario de ninguna manera?

Saludos!
  #6 (permalink)  
Antiguo 25/11/2010, 17:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Proteger inicio de sesión remota

a ver, ¿entonces todo el tiempo estuviste hablando de un formulario normal?

entonces es aún mas simple... investiga el término CSRF y así puedes proteger la entrada a tu sistema, en dado caso solo generarías un hash-id al mostrar el formulario al cliente...

y al recibir el formulario no esta dicho valor pues entonces quiere decir que no proviene de tu formulario... (:

PDTA: cabecera me refería a los headers que se pueden especificar en una conexión remota!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 26/11/2010, 01:17
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Proteger inicio de sesión remota

Cita:
Iniciado por pateketrueke Ver Mensaje
a ver, ¿entonces todo el tiempo estuviste hablando de un formulario normal?

entonces es aún mas simple... investiga el término CSRF y así puedes proteger la entrada a tu sistema, en dado caso solo generarías un hash-id al mostrar el formulario al cliente...

y al recibir el formulario no esta dicho valor pues entonces quiere decir que no proviene de tu formulario... (:

PDTA: cabecera me refería a los headers que se pueden especificar en una conexión remota!!
He estado leyendo la wiki y esta web http://www.eslomas.com/index.php/arc...icaciones-web/

Si en el formulario de login pones un token aleatorio (un campo más, ej. HIDDEN) que cambia en cada recarga de la página, y este es enviado cuando pulsas el boton "Entrar", tendrás que comparar ese token en el campo HIDDEN con algo que te diga que es válido no? y es ahí cuando no veo como implementarlo.

Podrías ponerme un mini ejemplo? lo que dices es esto que muestra esta otra página? http://blog.amarelloartis.com/2007/0...siones-en-php/

Tu lo entiendes así?

Muchas gracias
  #8 (permalink)  
Antiguo 27/11/2010, 10:39
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Proteger inicio de sesión remota

No sé como hacer un token de seguridad de sesión y utilizarlo.

¿Esto podría valer como token, pero cómo se usaría?

$token = md5(uniqid(rand(), true));

Esto lo guardo en una sesión y cuando imprimo el formulario de login tengo que incluirlo en un campo hidden?

Una ayuda plis!
  #9 (permalink)  
Antiguo 27/11/2010, 10:49
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Proteger inicio de sesión remota

Cita:
Iniciado por neodani Ver Mensaje
No sé como hacer un token de seguridad de sesión y utilizarlo.

¿Esto podría valer como token, pero cómo se usaría?

$token = md5(uniqid(rand(), true));

Esto lo guardo en una sesión y cuando imprimo el formulario de login tengo que incluirlo en un campo hidden?

Una ayuda plis!
¿Es posible que este ejemplo lo aclare todo, y diga como se tiene que hacer un form y un token de sesión de manera correcta? :D

http://www.serversidemagazine.com/ph...t-csrf-attacks
  #10 (permalink)  
Antiguo 14/01/2011, 00:25
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Proteger inicio de sesión remota

yo implemento mas o menos algo asi
http://net.tutsplus.com/tutorials/ph...ith-form-keys/

pero aun sigo con la duda de como proteger la url remota si alguien pudiese adivinar
la url y ponerla directamente en el navegador

saludos

espero sus comentarios
__________________
gerardo
  #11 (permalink)  
Antiguo 14/01/2011, 00:50
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Proteger inicio de sesión remota

http://maycolalvarez.blogspot.com/20...ificacion.html
__________________
gerardo

Etiquetas: inicio, proteger, remota, sesión
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 21:57.