Foros del Web » Programando para Internet » PHP »

problemas con sesiones

Estas en el tema de problemas con sesiones en el foro de PHP en Foros del Web. buenas, en script php tengo las sesiones configuradas de la siguiente forma: ini_set("session.use_only_cookies", 0); ini_set("session.use_cookies", 0); ini_set("session.use_trans_sid",0); ini_set("session.gc_maxlifetime", 10); como es para una administración intenta ...
  #1 (permalink)  
Antiguo 06/09/2004, 10:49
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 7 meses
Puntos: 0
problemas con sesiones

buenas,

en script php tengo las sesiones configuradas de la siguiente forma:

ini_set("session.use_only_cookies", 0);
ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid",0);
ini_set("session.gc_maxlifetime", 10);

como es para una administración intenta ser seguro:
- sesión se propaga por url, sin utilizar cookies
- la sesión muere a los 10 segundos (aqui no estoy tan seguro...)
- y esta deshabilitado el trans_sid porque propago yo las urls en los enlaces para no depender de la configuración del servidor final donde este...

bueno 2 dudas:

a) a pesar de tener esta configuración el trans_sid se continua propagando quedando los enlaces de esta forma:
index.php?sadm=899746b47fc6679093c47ea7f6caf7c5&sa dm=899746b47fc6679093c47ea7f6caf7c5

vaya, con el SID doble el que pasa el trans_sid y el que paso yo...

donde puede estar el error?


b) A pesar de:

ini_set("session.gc_maxlifetime", 10);

pero a pesar de eso en la carpeta temporal los archivos se mantienen durante horas...
  #2 (permalink)  
Antiguo 06/09/2004, 11:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Bueno .. la propagación del SID en el URL no es de lo más seguro .. deberías usar propagación del SID en cookies (lo menciona PHP.net en su apartado de sesiones)

Sobre tus problemas ..

a) Si eso te sigue sucediendo.. revisa que valor tiene:
url_rewrite_tags .. o bien fuerzalo a "nada" ""....

Y .. no te olvides de indicar ese "forzado" de configuración en todos tus scripts que usen sesiones y antes de un session_start() o cualquier otra función de sesiones.

b) .. session.gc_max_timelife sólo determina el tiempo que tu SID es válido .. no el tiempo que está físicamente el archivo que PHP crea para la sesión en el servidor. Es más .. ese "gc" significa "garbage colector" o dicho en castellano "el recolector de basura" que viene a ser que .. en ese tiempo, pasa ese archivo a espera que sea "borrado" físicamente dle servidor. Eso sucederá cuando decida: session.gc_probality (o algo así .. lo escribí de memoria) que define el nº de porcentaje de veces que se ha de inciar una sesión (session_start()) para que actue el borrado físico del archivo que esté en modo "gc" (por que lo "expiró" la otra directiva mencionada). A todo esto hay detalles sobre el borrado físico del archivo en S.O.

Puedes ver más info al respecto en:
www.php.net/session

Un saludo,
  #3 (permalink)  
Antiguo 08/09/2004, 03:40
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 7 meses
Puntos: 0
En cuanto a la seguridad:

en http://es.php.net/session solo he visto esto:
Cita:
El módulo de sesiones admite ambas formas. Las Cookies son la mejor opción, pero como no son fiables (los clientes no están obligados a aceptarlas), no podemos confiar en ellas. El segundo método incrusta el "session id" directamente en las URLs.
Por eso, entre otras razones, me decidi hacerlo con URL, porque si la persona que tiene que administrar el sitio no tiene las cookies activadas no se vean imposibilitadas de usarlo.

Pero a parte los conocimientos que tengo yo sobre seguridad de sesiones son los siguientes:


- El SID, tanto si se pasa en cookie como por URL el problema es que en las cabeceras HTTP esta incluida el SID por tanto con un sniper o herramienta similar se puede obtener ese dato y identificarte como usuario valido... la solución que yo adopte para este problema es que cuando un usuario se identifica se guarda la IP, y luego se comprueba en cada peticion si coincide con la ip original que se ha identificado... aunque vaya si se usa un sniper tambien se obtiene el usuario y la contraseña pero bueno...

- cuanto mas tiempo permanece el SID como valido, tiene el inconveniente que con mas tiempo puede contar el atacante... por lo tanto en sesiones que contienen información realmente importantes o permiten el acceso a zonas protegidas es interesante poner limitación a su vida... con lo que el SID de identificación en la visita de la web, normalmente lo hago con cookies y sin mucha prisa de caducidad y en la administración el tiempo es realmente corto...

- a parte segun tengo entendido robar las cookies y obtener el SID se puede lograr de varias formas y en segun que ataques de robo de cookies depende en parte de los conocimientos del usuario, con lo qual es una opcion importante a tener en cuenta... pero eso se arregla con una comprobación de ip...

en resumen, que no creo que haya mucha diferencia de seguridad entre un sistema y otro, y al final quizas premia la accesibilidad y la independecia de configuración del navegador del cliente...

en cuanto a los problemas anteriores:

a) ya he forzado el 'url_rewrite_tags' y sigue igual:
ini_set("url_rewrite_tags", "");
ini_set("session.use_trans_sid",0);
ini_set("session.gc_maxlifetime", 1);
ini_set("session.use_only_cookies", 0);
ini_set("session.use_cookies", 0);
session_name('sadm');
session_start();

ejemplo de enlace:
action="index.php?m=redactor&n=1&<?php echo SID; ?>"

es increible porque utilizo configuraciones similares en otros sistemas y esto no me ha pasado nunca.... no entiendo porque se produce...

b) gracias por la información de borrado... de todas formas he comprobado que aunque permanezca el archivo el acceso ya ha quedado anulado y no, despues de minutos de haber cerrado el navegador el SID permanece valido... tendra que ver con el problema anterior... creo que esta ignorando las directivas de configuración que indico...

Última edición por Nark; 08/09/2004 a las 03:43
  #4 (permalink)  
Antiguo 08/09/2004, 12:33
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 7 meses
Puntos: 0
alguien puedo decirme porque no coje mi configuración de las sesiones?

como puedo saber que es lo que falla?
  #5 (permalink)  
Antiguo 08/09/2004, 13:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Revisastes en php.net (www.php.net/ini_set) si todas las directivas que pretendes "forzar" en tiempo de ejecución (y que supongo que forzaras en todos los scripts que intentes usar sesiones) se pueden alterar vía ini_set() ? .. NO todas las directivas de PHP (en general) se pueden modificar de esa forma, algunas sólo se puede vía .htacces o sólo vía php.ini

Sobre el tema de seguridad en la propagación del SID .. tienes ya por defecto (PHP) la directiva:
session.referer_check

Que hace esa validación de "IP->Cliente"

De la versión en ingles de la documentación .. hay sale este documento (que no se si leistes)
http://www.acros.si/papers/session_fixation.pdf

Por mi parte prefiero propagar el SID en cookies (pese que ello implica que mis clientes han de permitir cookies, cosa que ya aviso). Y tiempo de expiración (session.gc_maxtimelife) corto o 0 junto con la cookie definida a 0 segundos de expiración. (configurado vía php.ini)

Un saludo,
  #6 (permalink)  
Antiguo 08/09/2004, 15:29
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 7 meses
Puntos: 0
Cita:
Iniciado por Cluster
Revisastes en php.net (www.php.net/ini_set) si todas las directivas que pretendes "forzar" en tiempo de ejecución (y que supongo que forzaras en todos los scripts que intentes usar sesiones) se pueden alterar vía ini_set() ? .. NO todas las directivas de PHP (en general) se pueden modificar de esa forma, algunas sólo se puede vía .htacces o sólo vía php.ini
Las unicas directivas que modifico son las que he puesto arriba, y en la documentación indican que son: PHP_INI_ALL, por lo tanto tendrian que funcionar los cambios.

Que metodo puedo utilizar para descubrir el problema?

Realmente lo considero un asunto grave, pues no es culpa del php.ini, directivas similares me funcionan en otros directorios... puede rozar la paranoia pero no entiendo porque no funcionan? que puede provocar algo asi?



Cita:
Iniciado por Cluster
Sobre el tema de seguridad en la propagación del SID .. tienes ya por defecto (PHP) la directiva:
session.referer_check

Que hace esa validación de "IP->Cliente"

De la versión en ingles de la documentación .. hay sale este documento (que no se si leistes)
http://www.acros.si/papers/session_fixation.pdf

Por mi parte prefiero propagar el SID en cookies (pese que ello implica que mis clientes han de permitir cookies, cosa que ya aviso). Y tiempo de expiración (session.gc_maxtimelife) corto o 0 junto con la cookie definida a 0 segundos de expiración. (configurado vía php.ini)

Un saludo,


Gracias no lo lei, ultimamente cuando entre en el manual de php.net automaticamente me lleva a la version española y veo que realmente hay mucha diferencia... muchas gracias por la información y por el enlace.

Leyendo el pdf (interesantisimo, por cierto) veo que tienes toda la razón, las cookies parecen las mas seguras.

Cambiando mi forma de trabajar:
ini_set("session.use_cookies", 1);
ini_set("session.use_only_cookies", 1);
ini_set("session.gc_maxlifetime", 60);

ahora ya funciona perfectamente todo... aunque seria curioso descubrir porque la configuracion no funcionaba...

por cierto en cuanto a:
session.referer_check
veo que tienes que poner la ip del cliente... pero tienes que saberla primero... asi que continuare con mi comprobación manual...

gracias de nuevo por todo

Última edición por Nark; 08/09/2004 a las 15:53
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 00:08.