Realizando pruebas en la autenticación

75 views
Skip to first unread message

jordicakephp

unread,
Dec 3, 2008, 9:09:16 AM12/3/08
to CakePHP en Español
Buenas,

Consulto al grupo porque estoy haciendo unas pruebas y no entiendo qué
sucede. Sería estupendo saber si esto es normal o si hay algo que hago
mal. Posiblemente sea algo muy básico sobre la autenticación.

Toma 1. Si entro en Internet Explorer y me autentico en un programa,
entro en la zona privada, hago lo que tengo que hacer y salgo, resulta
que, si después de haber salido escribo en la barra de direcciones un
URL privado, puedo entrar en el sistema. Según entiendo, esto no
debería pasar. Con Firefox, por ejemplo, no pasa.

Toma 2. Si entro en Internet Explorer y me autentico en un programa,
entro en la zona privada, hago lo que tengo que hacer y salgo, si
después de haber salido borro el Historial de navegación y luego
escribo en la barra de direcciones el URL privadao, entonces ya no
puedo entrar.

Sería estupendo algún comentario que aclarara este comportamiento.
Gracias de antemano y un saludo. Jordi

Joaquin Windmüller

unread,
Dec 3, 2008, 10:12:38 AM12/3/08
to cakep...@googlegroups.com
Lo que describes es el Cache del navegador. Así de simple.

Al tener una copia fresca en el cache exploter no hace ninguna solicitud al servidor y por eso muestra contenido que no debería mostrar.

Si está mostrando contenido que no debería mostrar debes jugar con las cabeceras http de cache. La verdad es que nunca he probado a fondo esto y las veces que lo he necesitado (para solicitudes AJAX generalmente) no me ha servido:

http://snippets.dzone.com/posts/show/6535


2008/12/4 jordicakephp <jordic...@gmail.com>

jordicakephp

unread,
Dec 4, 2008, 8:40:52 AM12/4/08
to CakePHP en Español
Muchas gracias, Joaquín

Y como que en Firefox no pasa y en IE sí? Es alguna configuración
predeterminada del navegador?

Un saludo.

On 3 dic, 16:12, "Joaquin Windmüller" <joaquin....@gmail.com> wrote:
> Lo que describes es el Cache del navegador. Así de simple.
>
> Al tener una copia fresca en el cache exploter no hace ninguna solicitud al
> servidor y por eso muestra contenido que no debería mostrar.
>
> Si está mostrando contenido que no debería mostrar debes jugar con las
> cabeceras http de cache. La verdad es que nunca he probado a fondo esto y
> las veces que lo he necesitado (para solicitudes AJAX generalmente) no me ha
> servido:
>
> http://snippets.dzone.com/posts/show/6535
>
> 2008/12/4 jordicakephp <jordicake...@gmail.com>
>
>
>
>
>
> > Buenas,
>
> > Consulto al grupo porque estoy haciendo unas pruebas y no entiendo qué
> > sucede. Sería estupendo saber si esto es normal o si hay algo que hago
> > mal. Posiblemente sea algo muy básico sobre la autenticación.
>
> > Toma 1. Si entro en Internet Explorer y me autentico en un programa,
> > entro en la zona privada, hago lo que tengo que hacer y salgo, resulta
> > que, si después de haber salido escribo en la barra de direcciones un
> > URL privado, puedo entrar en el sistema. Según entiendo, esto no
> > debería pasar. Con Firefox, por ejemplo, no pasa.
>
> > Toma 2. Si entro en Internet Explorer y me autentico en un programa,
> > entro en la zona privada, hago lo que tengo que hacer y salgo, si
> > después de haber salido borro el Historial de navegación y luego
> > escribo en la barra de direcciones el URL privadao, entonces ya no
> > puedo entrar.
>
> > Sería estupendo algún comentario que aclarara este comportamiento.
> > Gracias de antemano y un saludo. Jordi- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Joaquin Windmüller

unread,
Dec 4, 2008, 9:23:51 AM12/4/08
to cakep...@googlegroups.com
No estoy muy seguro...

Acá encontré una página que habla un poco sobre cache de firefox y exploter.

http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

No responde tus preguntas, pero está interesante

2008/12/5 jordicakephp <jordic...@gmail.com>

David Valdez

unread,
Dec 4, 2008, 10:50:40 AM12/4/08
to cakep...@googlegroups.com
Firefox tiene un mejor manejo del cache.

IE guarda cache de cosas que no debería guardar.

Joaquin Windmüller

unread,
Dec 4, 2008, 11:23:21 AM12/4/08
to cakep...@googlegroups.com
David, tienes algún enlace al respecto? me llama la atención

2008/12/5 David Valdez <da...@cakephp-es.org>

jordicakephp

unread,
Dec 4, 2008, 11:46:38 AM12/4/08
to CakePHP en Español
Entonces, por lo que decís, por una parte me alegra saber que no hago
nada mal, pero por otra esto es un problema para la seguridad, ¿no?
¿Qué sucede si un usuario se conecta al sistema desde IE, hace lo que
tiene que hacer, sale, y luego otra persona escribe en la barra de
direcciones el URL correspondiente a la zona privada del sistema? Esto
en PHP no pasaba porque el id de sesión se adjuntaba en el URL y otra
persona lo tenía imposible para escribirlo en la barra de direcciones,
pero ahora, con el Auth de cake, simplemente escribiendo el nombre de
la acción ya puedes ejecutar su lógica...

Gracias y saludos. Jordi

On 4 dic, 16:50, "David Valdez" <da...@cakephp-es.org> wrote:
> Firefox tiene un mejor manejo del cache.
>
> IE guarda cache de cosas que no debería guardar.
>
> > > - Mostrar texto de la cita -- Ocultar texto de la cita -

Joaquin Windmüller

unread,
Dec 4, 2008, 11:55:27 AM12/4/08
to cakep...@googlegroups.com
Lee el artículo que te pasé, ahí hay una manera de obligar a explorer a que el cache expire.

2008/12/5 jordicakephp <jordic...@gmail.com>

jordicakephp

unread,
Jan 13, 2009, 8:52:42 AM1/13/09
to CakePHP en Español
Gracias Joaquín,

He hecho algo parecido a lo que propones y funciona, pero al final
sigo las indicaciones de http://es.php.net/manual/es/function.header.php:

"PHP scripts often generate dynamic content that must not be cached by
the client browser or any proxy caches between the server and the
client browser. Many proxies and clients can be forced to disable
caching with:"

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

He añadido estas dos instrucciones al comienzo de todas las acciones
del programa que generan contenido privado. En IE7 ya no puedo acceder
a ese contenido si salgo del sistema y escribo el URL en la barra de
direcciones. La acción para editar una categoría, por ejemplo, queda
tal y como la tenía, pero ahora empieza así:

function editar($categoria_id = null){
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the
past

Mis dudas:

1. ¿Qué tal es esta solución? En IE7 funciona y, según entiendo,
debiera funcionar para la mayoría de agentes de usuario, como
ambiguamente viene a decir el manual de php.

2. ¿Tiene sentido codificar esto en un componente, para no tener que
escribirlo en todas las acciones cuyo contenido no queremos guardar en
el cliente?

3. ¿Qué tal montar una jerarquía de controladores (separando los
controladores que manejan la lógica privada y la lógica publica del
programa, por ejemplo, y poniendo este código sólo en los
controladores privados)?

Gracias de antemano y un saludo

On 4 dic 2008, 17:55, "Joaquin Windmüller" <joaquin....@gmail.com>
wrote:
> Lee el artículo que te pasé, ahí hay una manera de obligar a explorer a que
> el cache expire.
>
> 2008/12/5 jordicakephp <jordicake...@gmail.com>

Joaquin Windmüller

unread,
Jan 13, 2009, 12:13:19 PM1/13/09
to cakep...@googlegroups.com
Agentes de usuario no es ambiguo, un agente puede ser un bot también y manejar el cache en el bot le permite ser más eficiente (claro que para tu caso específico no van a llegar bots a las acciones que requieren auth).

Una cuarta opción es manejar un arreglo (en cada controlador que indique las acciones que no deben ser agregadas al cache del navegador) y centralizar el filtrado en AppController::beforeFilter.

Saludos

2009/1/14 jordicakephp <jordic...@gmail.com>

jordicakephp

unread,
Jan 13, 2009, 12:12:54 PM1/13/09
to CakePHP en Español
Buenas grupo,

Espero que este tema no se salga demasiado de Cake ;) Sólo quería
asegurarme de que manipulando el campo Cache-control de la cabecera
efectivamente se deshabilita el sistema cache en el agente de usuario
y no lo tengo muy claro. He consultado el RFC 2616 y pon esto: " These
directives typically override the default caching algorithms". ¿Qué
significa típicamente? Supongo que haciendo esto el sistema funciona
en la mayoría de navegadores, cierto? Bueno, dejo ya este tema.
Gracias de antemano por vuestra ayuda y saludos.

On 13 ene, 14:52, jordicakephp <jordicake...@gmail.com> wrote:
> Gracias Joaquín,
>
> He hecho algo parecido a lo que propones y funciona, pero al final
> sigo las indicaciones dehttp://es.php.net/manual/es/function.header.php:

JmN

unread,
Jan 14, 2009, 1:04:17 PM1/14/09
to CakePHP en Español
Igual cabe aclarar que si estas "deslogueado" de la aplicación, por
mas que veas el contenido a partir del cache las acciones que ejecutes
no van a funcionar, porque ahí vas a realizar un nuevo request.

daniel ceillan

unread,
Jan 15, 2009, 9:41:00 AM1/15/09
to CakePHP en Español
Invente una forma de burlar el cache del exploter... por lo menos a mi
me funciono...

Por ejemplo con imagenes que son editadas pero no cambian de nombre...
arme un componente de captcha para cake y la imagen del captcha cambia
el codigo pero no cambia la imagen... al recargar la pagina me seguia
mostrando la imagen anterior... cuando el codigo habia cambiado...

Es muy simple... para el navegador una misma url es un mismo
resultado... si vos pedis distintas url que te traen el mismo
resultado, para el seran distintas paginas...

por lo que...

si le agregas al final de la url un codigo aleatorio irrepetible...
para el navegador siempre sera un nuevo elemento por lo tanto no lo
buscara en el cache... asi de simple, sin importar si es exploter,
firefox, safari...

Ejemplo:

$html->image('florcita.jpg'); // este codigo te carga la imagen
nombrada... y cada vez que ejecutes la pagina traera la del cache si
existe...


$html->image('florcita.jpg?'.time()); // este codigo te carga la
imagen nombrada... y cada vez que ejecutes la pagina traera la imagen
del servidor...

Si a tu url le agregas el time() al final, no pasara nada...
simplemente no se cargara de ningun cache, ni de el del navegador, ni
del de el ISP, ni de el de tu vecino... Si no me creen prueben con un
documento pdf, descargenlo una vez... suban uno modificado al
servidor... y toda la semana seguiran bajando el anterior archivo
aunque en el servidor este modificado... malditos cache :@, bueno asi
los burlo io...

Buen provecho... ;)

jordicakephp

unread,
Jan 15, 2009, 5:46:12 AM1/15/09
to CakePHP en Español
Sí, pero creo que si la página en la que haces clic también esta en la
cache, entonces también puede verse... También puede verse siempre que
un usuario del navegador consulte la carpeta de archivos temporales.
No sé... yo nunca guardaría en la cache las páginas del $this->Auth-
>allow(). Gracias y saludos.

jordicakephp

unread,
Jan 15, 2009, 6:34:02 AM1/15/09
to CakePHP en Español
Gracias,

Al final he montado el componente y ahora lo primero que hacen todas
las acciones que sirven contenido privado es llamarlo, aunque también
creo que podría uno ir al Auth y poner esto ahí, si esto tiene
sentido, claro. Haciendo esta modificación, cuando llamo a estas
acciones, el programa devuelve dos cabeceras, una con código de estado
302, y otra con código de estado 200.

Por ejemplo, si me autentico y entro en la parte privada, el mensaje
HTTP para la acción privada http://www.midominio.com/usuarios/categorias/listar
es este:

HTTP/1.1 302 Found
Date: Thu, 15 Jan 2009 11:15:29 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.6
Set-Cookie: CAKEPHP=sk78ltq75rcmjdmo2rqo0odd11; expires=Thu, 22 Jan
2009 11:15:30 GMT; path=/
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Location: http://www.midominio.com/usuarios/login
Content-Length: 0
Connection: close
Content-Type: text/html
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2009 11:15:30 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.6
Set-Cookie: CAKEPHP=tq074tg8ntp7eb5crruqkm9e41; expires=Thu, 22 Jan
2009 11:15:30 GMT; path=/
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Content-Length: 6528
Connection: close
Content-Type: text/html

Efectivamente, el código de estado 302, que se produce sólo al
manipular el campo Cache-control, indica, si entiendo bien, esta
redirección: "The requested resource resides temporarily under a
different URI. Since the redirection might be altered on occasion, the
client SHOULD continue to use the Request-URI for future requests.
This response is only cacheable if indicated by a Cache-Control or
Expires header field."

Tengo dudas en dejar esto así, jeje. ¿Alguien puede aclarar o ampliar
esto? ¿Por qué el agente de usuario recibe un mensaje 302 cuando se
toca el Cache-control de la cabecera? ¿Qué indica exactamente? Muchas
gracias de antemano y un saludo.


On 13 ene, 18:13, "Joaquin Windmüller" <joaquin....@gmail.com> wrote:
> Agentes de usuario no es ambiguo, un agente puede ser un bot también y
> manejar el cache en el bot le permite ser más eficiente (claro que para tu
> caso específico no van a llegar bots a las acciones que requieren auth).
>
> Una cuarta opción es manejar un arreglo (en cada controlador que indique las
> acciones que no deben ser agregadas al cache del navegador) y centralizar el
> filtrado en AppController::beforeFilter.
>
> Saludos
>
> 2009/1/14 jordicakephp <jordicake...@gmail.com>
>
>
>
>
>
> > Gracias Joaquín,
>
> > He hecho algo parecido a lo que propones y funciona, pero al final
> > sigo las indicaciones dehttp://es.php.net/manual/es/function.header.php:

Carlos Hernan Aguilar Hurtado

unread,
Aug 27, 2012, 2:58:08 PM8/27/12
to cakep...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages