2008-11-04 14 views
6

El programa de instalación:almacenamiento en caché de la imagen, y HTTPHandler FormsAuthentication

Estoy trabajando en un sitio web que utiliza Formsauthentication que utilizan cookies para almacenar el billete de inicio de sesión. El sitio también tiene un HTTPHandler que gestiona las imágenes almacenadas en la base de datos. El controlador almacena en caché las imágenes para que sean públicas y vencen en 20 minutos. Hemos notado que dado que las imágenes tienen el mismo ciclo de vida que una página, las imágenes también incluyen la cookie Formsauthentication. La configuración es IIS 6, servidor Win2k, la caducidad del contenido no está habilitada.

El problema:

Lo que estamos experimentando es los registros de la persona A y le pega en un par de páginas. Luego, la Persona B accede a la página predeterminada, no inicia sesión y obtiene la cookie para la Persona A, y puede ver todos los datos A de la persona. Hemos reproducido el problema una vez activando la caducidad del contenido en IIS, pero no se ha reproducido de forma consistente, por lo que no estamos seguros de si Content Expiration nos ayudó a reproducirlo. Estamos asumiendo que dado que las imágenes se almacenan en caché como públicas y también contienen la cookie con el FormsAuthentication, de alguna manera es posible que la persona B involuntariamente obtenga la cookie de la persona A. Sabemos que esto no es un ataque en el sitio web.

Alguien ha experimentado algo similar a este comportamiento? Si es así, ¿puede darnos algún consejo sobre cómo reproducir este problema de manera consistente?

Respuesta

0

¿Por qué la persona B obtiene la cookie de la persona A? Supongo que quiere decir que la cookie de sesión de la Persona B se está asociando con la ID de inicio de sesión de A. Ese es el meollo del problema.

Me suena que es una ID de inicio de sesión se almacena en un lugar que podría cruzar las solicitudes - como un archivo temporal o en el DB - sin asociarlo con una cookie de sesión. (Problema relacionado: el resultado de la página se almacena en caché, pero no se asocia correctamente con la cookie de sesión ni se recupera). Cuando la información de la sesión se almacena o se almacena en caché, se debe asociar a la cookie . Piense en términos de datos de sesión pertenecientes a un navegador, no en un inicio de sesión.

me habría instalar la extensión LiveHTTP Firefox y examinar las cabeceras de petición/respuesta. Mi apuesta es que verán que A y B tienen cookies diferentes, pero en el servidor ambos están asociados con la misma ID de inicio de sesión.

1

Suponemos que la cookie está en el encabezado de respuesta y está escribiendo la misma cookie que existe en la máquina de la persona A en la persona B. Es importante notar que este problema ocurrió con la persona A en IE 7 y la persona B en Firefox . También cuando la persona A cerró la sesión, la persona B también se desconectó porque el ticket de autenticación de la forma ya no era válido en el servidor. Así que sí, sí tenían cookies de differnet pero el mismo ticket de autenticación de autenticación dentro de cada una de sus cookies. sin embargo, uno se generó sin iniciar sesión.

También encontramos este artículo, pero no hemos podido confirmar si esta es la causa. http://support.microsoft.com/default.aspx?scid=kb;EN-US;917072

Voy a ver qué me dice LiveHTTP e informará. Gracias.

+0

A menos que sea una respuesta a la pregunta, edite su pregunta o comente directamente la respuesta que está comentando. Hay un campo 'agregar comentario' expresamente para ese propósito. –

0

Claro, si esas imágenes (y CSS y archivos JS estáticos, etc.) no se sirven como HTTPS, estarán sujetas a almacenamiento en caché por ISP u otros servidores proxy (bueno, cachés en realidad), junto con con sus galletas

Hay una directiva de almacenamiento en caché o menos así:

Cache-control: no-cache="set-cookie,set-cookie2" 

... que se supone que instruir a los cachés no hagan caché de las cabeceras "set-cookie" de respuesta, pero no estoy seguro de cómo apoyado ampliamente este es (a pesar de ser estándar).

Evite los encabezados de respuesta de cookies configuradas cuando sirva imágenes si puede (puede que no sea fácil si no tiene el control completo de la administración de la sesión). Si un usuario debe ser autenticado para ver ciertas imágenes, entonces esas imágenes no deben almacenarse en caché públicamente de todos modos.

0

Lo siento, me olvidé de mencionar que todo el tráfico pasaba por el puerto 443 como SSL. Estamos planeando eliminar la cookie establecida para las imágenes. Sin embargo, estamos un poco confundidos sobre cómo esto podría suceder cuando todo el tráfico se procesa a través de SSL.

+0

Entonces, ¿incluso su página de inicio es SSL? Antes de la autenticación? –

+0

... y no tiene su propio caché antes de la terminación de SSL? –

+0

Por favor edite su pregunta original, agregue esta información, y elimine estas publicaciones después. La razón es que las respuestas a las preguntas son las únicas cosas que se supone que deben ir debajo de la pregunta. Si tiene más información, edite su pregunta o publique un comentario a su pregunta. –

0

Todo el tráfico era SSL ... revisando los registros de IIS todo estaba pasando por el puerto 443. El único almacenamiento en caché que se estaba configurando era en las imágenes a público como se mencionó anteriormente. Nuestra suposición es que esto está en el almacenamiento en caché de salida de resultados que causa el problema.

+0

¿Has averiguado que esa persona B definitivamente adquiere la cookie de la persona A? (¿Está rastreando las solicitudes con tanto detalle?) Su pregunta parece que ya la ha reducido a imágenes, ¿cómo/por qué? Podría ser que tenga un problema de subprocesamiento con solicitudes concurrentes o algo así. –

+0

Por favor edite su pregunta original, agregue esta información, y elimine estas publicaciones después. La razón es que las respuestas a las preguntas son las únicas cosas que se supone que deben ir debajo de la pregunta. Si tiene más información, edite su pregunta o publique un comentario a su pregunta – TheSoftwareJedi

0

¿Está seguro de que no tiene habilitada la caché de salida en la página?

0

Puede ser útil instalar Fiddler para investigar sus solicitudes http como se especifica anteriormente. Además, confirme que las cookies son las mismas. ¿Su manejador o sistema de autenticación de formularios usa una referencia de objeto estático? Puede tener una condición de carrera en su código. y no están bloqueando adecuadamente sus recursos.

Cuestiones relacionadas