Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 16 de febrero de 2016
Noooooo!Hace unos días, el amigo Eloy Ortiz, ex-alumno de mi curso de ASP.NET MVC 5 en CampusMVP, me comentaba vía email un problema que había encontrado con una aplicación MVC que debía ser utilizada desde clientes con Internet Explorer 11 en un entorno corporativo.

El problema consistía básicamente en que Internet Explorer ignoraba las cookies, tanto las responsables de mantener el seguimiento de estado de la sesión (ASP.NET_SessionId), las de autenticación (.AspNet.ApplicationCookie) u otras cookies creadas a propósito por la aplicación, lo que hacía imposible su uso.

La verdad es que no pude ayudarlo demasiado porque es un tema que no me había ocurrido nunca y en un escenario que no era sencillo de reproducir. Intenté darle algunas pistas sobre qué podía ir mirando para identificar el origen del problema, pero finalmente no llevaron a ninguna parte y probablemente no sirvieron nada más que para aumentar la incertidumbre.

Algunos días después, me contactaba de nuevo diciéndome que había encontrado el problema, y me ha parecido tan curioso que pensé que sería interesante comentarlo por aquí, por si a alguien más le ocurre lo mismo.


Resulta que, por motivos de seguridad, Internet Explorer ignora las cookies si el nombre del host que está sirviendo la página contiene un guión bajo "_" o cualquier otro carácter no permitido expresamente por la RFC 883. Eloy estaba desplegando su aplicación en el servidor de un cliente, a cuyo host le habían dado un desafortunado nombre, del tipo "gestion_clientes", y esto hacía que no funcionara correctamente precisamente en los navegadores usados en el entorno corporativo (IE11).

Ya lo comentaba hace bastante tiempo Eric Law, ex miembro del equipo de producto de Internet Explorer, en su post Internet Explorer Cookie Internals (FAQ):
Q5: IE won’t set a cookie when the hostname/domain contains an underscore?
A: Correct. Technically, an underscore (like this _ ) is not a DNS character, and while Windows will let you use an underscore when naming your machine, it warns you that doing so may cause problems. One such problem is that WinINET blocks attempts to set cookies on such domains. See http://support.microsoft.com/kb/316112/en-us
Internet ExplorerInicialmente este comportamiento se implementó en el año 2001 (!) como parche de seguridad para IE5.5 e IE6, pero ha seguido formando parte de las versiones posteriores de sus browsers, incluidos el más recientes IE11. En Edge no he conseguido reproducir este comportamiento, pero he leído referencias a que también era problemático. Otros browsers como Chrome o Firefox no tienen este problema.

Obviamente, al tratarse de algo relativo a Internet Explorer, en el lado cliente, no es específico de tecnologías de servidor como ASP.NET o MVC: ocurrirá en cualquier tipo de aplicación (PHP, Node, Java, Ruby…) siempre que use cookies, el nombre del host contenga caracteres no válidos, y el cliente sea un navegador de la familia IE. Resulta paradójico que en este caso el problema venga precisamente de la interpretación estricta de los estándares por parte de IE, algo que le hemos reclamado en tantas ocasiones…

Bien, y si nos hemos encontrado ante este problema, ¿qué podemos hacer? Pues me temo que poca cosa, excepto cambiar el nombre del host por algo más razonable como "gestion" o "gestion-clientes".

Por tanto, la moraleja: a la hora de publicar una aplicación, aseguraos de elegir un nombre de host que sólo use letras, números y guiones, además del punto para separar los subdominios, porque de lo contrario os llevaréis sorpresas desagradables.

Muchas gracias a Eloy por compartir su experiencia, y espero que pueda ser útil a alguien más :)

Más información en:
Publicado en Variable not found.

Aún no hay comentarios, ¡sé el primero!