Es allí una manera de mantener una página de la representación una vez que una persona ha iniciado sesión, pero golpeó el botón "atrás"?

StackOverflow https://stackoverflow.com/questions/64059

Pregunta

Tengo un sitio web que requiere un inicio de sesión y muestra la información sensible.

La persona se va a la página, se le pedirá que inicie sesión en, a continuación, puede ver la información.

La persona inicia sesión en el sitio, y se redirige de nuevo a la página de inicio de sesión.

La persona, a continuación, puede pulsar "atrás" y vaya a la derecha de nuevo a la página donde la información confidencial contenida.Ya que el navegador sólo piensa en él como HTML renderizado, muestra que para ellos no hay problema.

Hay una manera de evitar que la información que se muestra cuando la persona se golpea el botón "atrás" de la sesión de pantalla?No estoy tratando de desactivar el botón volver en sí, sólo estoy tratando de mantener la información se muestra de nuevo porque la persona no ha iniciado sesión en el sitio más.

Por el bien del argumento, el sitio anterior/es el escenario ASP.NET con la Autenticación de Formularios (para que cuando el usuario va a la primera página, que es la página que desea, son redirigidos a la página de inicio de sesión - en caso de que lo que hace la diferencia).

¿Fue útil?

Solución

La respuesta corta es que no se puede hacer de forma segura.

Sin embargo, hay un montón de trucos que se pueden implementar para hacer que sea difícil para los usuarios de devolver el golpe y obtener datos confidenciales muestran.

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(Now.AddSeconds(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");

Esto va a deshabilitar el almacenamiento en caché del lado del cliente, sin embargo, esto es no soportado por todos los navegadores.

Si tienes la opción de utilizar AJAX, a continuación, los datos sensibles pueden ser recuperados usando un updatepanel que se actualiza desde el código del cliente y por lo tanto no se mostrará cuando se golpea la espalda, a menos que el cliente todavía está conectado.

Otros consejos

Caché y la historia son independientes y uno no debería afectar a los demás.

La única excepción hecho para los bancos es que la combinación de HTTPS y Cache-Control: must-revalidate las fuerzas de actualización cuando se navega en la historia.

En formato HTTP, no hay manera de hacer esto, excepto por la explotación de navegador errores.

Usted puede hackear su alrededor con Javascript que comprueba document.cookie y redirige cuando un "asesino" cookie se establece, pero me imagino que esto podría ir muy mal cuando el navegador no set/clear cookies exactamente como se esperaba.

De aspdev.org:

Agregue la siguiente línea en la parte superior del controlador de eventos Page_Load y su ASP.NET la página no serán almacenadas en caché en los usuarios de los navegadores:

Response.Cache.SetCacheability(HttpCacheability.NoCache)

La configuración de esta propiedad garantiza que si el usuario pulsa el botón atrás el contenido se ha ido, y si se presiona el botón "actualizar" será redirigido a la de inicio de sesión de la página.

DannySmurf, <meta> los elementos son muy poco fiables cuando se trata de controlar el almacenamiento en caché, y Pragma, en particular, lo es aún más. Referencia.

dannyp y otros, no-cache, no paran de cachés de almacenamiento de recursos sensibles.Simplemente significa que una caché no puede servir un recurso que ha almacenado sin revalidar primero.Si desea evitar a recursos sensibles de ser almacenado en caché, usted necesita usar el no-store directiva.

Usted podría tener una función de javascript que hace una rápida verificación servidor (ajax) y si el usuario no ha iniciado sesión, se borra la página actual y lo reemplaza con un mensaje.Obviamente, esto sería vulnerable a un usuario que javascript está desactivado, pero que es bastante raro.En el lado positivo, esto es, tanto el navegador y tecnología de servidor (asp/php etc) agnóstico.

Usted está buscando un no-cache directiva:

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">

Si tienes un master en diseño de la página de destino, esto puede ser un poco de malabares, pero creo que se puede poner la presente directiva en una sola página, sin afectar el resto de su sitio (suponiendo que es lo que quieres).

Si tienes la presente directiva establece, el navegador diligentemente la cabeza de vuelta al servidor buscando una nueva copia de la página, que hará que su servidor para ver que el usuario no está autenticado y golpear con él a la página de inicio de sesión.

Tienen el cierre de sesión de la operación de ser un POST.A continuación, el navegador preguntará "¿estás seguro de querer volver a enviar el formulario?", en lugar de mostrar la página.

No sé cómo hacerlo en ASP.NET pero en PHP me gustaría hacer algo como:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");

Que obliga a que el navegador vuelva a comprobar que el artículo, para su comprobación de autentificación debe ser disparada, negando el acceso de los usuarios.

Es un poco de un tirón, pero si había una java applet o una aplicación flash que se ha incrustado y la autenticación se realiza a través de que usted podría hacer para que ellos tenían para autenticar en, erm, 'en tiempo real' con el servidor cada vez que quería ver la información.

El uso de este también puede cifrar cualquier información.

Siempre existe la posibilidad de que alguien puede simplemente guardar la página con la información confidencial, al no tener la caché no va a conseguir alrededor de esta situación (pero, a continuación, una captura de pantalla pueden ser tomadas de un flash o java de la aplicación).

Para la integridad:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));

La respuesta correcta implica el uso de la configuración de la Caché de HTTP-Control de encabezado en la respuesta.Si desea asegurarse de que nunca caché de la salida, usted puede hacer Cache-Control:no-cache.Esto se utiliza a menudo en coordinación con la tienda así.

Otras opciones, si usted desea limitada de almacenamiento en caché, incluyen el establecimiento de un expira el tiempo y el must-revalidate, pero esto podría potencialmente causar una página en caché para mostrarse de nuevo.

Ver http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

Así, en un importante banco brasileño corporation (Banco do Brasil), que es conocido por tener uno de los mundos más seguro y eficiente de home banking software, simplemente ponen la historia.ir(1) en cada página.Por lo tanto, si usted pulsa el botón atrás, te será devuelto.Simple.

Por favor, busque en los encabezados de respuesta HTTP.La mayoría del código ASP que la gente está publicando looks para el establecimiento de aquellos.Estar seguro.

El ardilla libro de O'Reilly es la biblia de HTTP, y Chris Shiflett HTTP del libro también es buena.

Usted puede tener la página web con la sensible ser devuelto como un HTTP POST, a continuación, en la mayoría de los casos de los navegadores le dará el mensaje que le preguntará si desea volver a enviar los datos.(Por desgracia no puedo encontrar una fuente canónica para este comportamiento.)

Yo sólo tenía la banca ejemplo en mente.

La página de mi banco esta en que:

<meta http-equiv="expires" content="0" />

Este debe ser con esto, supongo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top