El indicador de seguridad no está establecido en Cookies en la aplicación .Net MVC

2

He incluido las siguientes líneas de códigos en mis archivos Web.Config y Glbal.asax.cs , pero aún cuando uso herramientas de desarrollador en el navegador, las marcas de seguridad no se configuraron para las siguientes cookies. Configuraciones SSLS también configuradas en mi IIS (casilla de verificación seleccionada requireSSL).

Me gustaría establecer el atributo seguro para todas las cookies, no solo para las cookies recibidas sino también para las enviadas.

En Web.config :

<httpCookies requireSSL="true"/>

En Global.asax.cs :

protected void Application_EndRequest(object sender, EventArgs e)
        {
            if (Request.IsSecureConnection == true && HttpContext.Current.Request.Url.Scheme == "https")
            {
                Request.Cookies["ASP.NET_SessionID"].Secure = true;
                if (Request.Cookies.Count > 0)
                {
                    foreach (string s in Request.Cookies.AllKeys)
                    {
                        Request.Cookies[s].Secure = true;
                    }
                }

                Response.Cookies["ASP.NET_SessionID"].Secure = true;
                if (Response.Cookies.Count > 0)
                {
                    foreach (string s in Response.Cookies.AllKeys)
                    {
                        Response.Cookies[s].Secure = true;
                    }
                }
            }
        }

Luego he alojado mi aplicación en IIS 7.5 en mi máquina local. Y habilitó la opción RequireSSL en la configuración SSL. Cuando hago clic en Examinar * .443 (https), puedo ver que localhost se ejecuta con HTTPS, pero cuando verifico los atributos de las cookies en el navegador, el indicador de seguridad no está establecido.

¿Me estoy perdiendo alguna configuración aquí?

    
pregunta Ask_SO 11.10.2017 - 08:49
fuente

1 respuesta

4

Su confusión es el resultado no de un error de codificación o de configuración, sino de un malentendido sobre cómo funcionan las cookies.

Cuando el servidor quiere crear o cambiar una cookie, lo hace con el encabezado de respuesta Set-Cookie . Allí, el servidor también puede especificar cómo el navegador debe tratar la cookie, por ejemplo. cuánto tiempo se conserva, si es seguro o no, etc. Esta información solo se envía una vez, cuando se crea la cookie por primera vez.

En cada solicitud, el cliente envía todas las cookies al servidor en el encabezado de solicitud Cookies . Entonces solo envía los nombres y valores. La información adicional (por ejemplo, el indicador de seguridad) no se envía. Estas son instrucciones del servidor al cliente, y no es necesario que el cliente repita las instrucciones al servidor.

Por lo tanto, una cookie es "segura" si el servidor incluyó el indicador secure en el encabezado Set-Cookie . Lo que el cliente luego envía en el encabezado Cookies es irrelevante. Tratar de marcar las cookies de solicitud como seguras, como usted lo hace, por lo tanto, tiene poco sentido.

Entonces, ¿por qué las cookies enviadas no se informan como seguras en sus herramientas de desarrollador? Es simplemente porque el campo no es aplicable a ellos, y por lo tanto se deja en blanco. No sé cómo hacerlo en IE, pero si cambia a Chrome, puede obtener una lista de todas las cookies en la pestaña "Aplicación", y puede ver fácilmente cuáles están marcadas como seguras.

Disclaimar: No soy un programador de ASP.NET.

    
respondido por el Anders 11.10.2017 - 14:06
fuente

Lea otras preguntas en las etiquetas