Flag sicuro non impostato su Cookie in. Applicazione MVC .Net

2

Ho incluso le seguenti righe di codici nei miei file Web.Config e Glbal.asax.cs , ma ancora quando utilizzo gli strumenti per sviluppatori nel browser I i flag sicuri non sono stati impostati per i cookie sottostanti. Anche configurato SSLSettings in IIS (casella di controllo selezionata requireSSL).

Vorrei impostare l'attributo secure su tutti i cookie, non solo sui cookie ricevuti ma anche sui cookie inviati.

In Web.config :

<httpCookies requireSSL="true"/>

In 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;
                    }
                }
            }
        }

Quindi ho ospitato la mia applicazione su IIS 7.5 sul mio computer locale. E abilitato l'opzione RequireSSL nelle impostazioni SSL. Quando faccio clic su Sfoglia * .443 (https), potrei vedere localhost in esecuzione con HTTPS ma quando controllo gli attributi dei cookie nel browser, il flag di sicurezza non è impostato.

Mi manca qualche configurazione qui?

    
posta Ask_SO 11.10.2017 - 08:49
fonte

1 risposta

4

La tua confusione è il risultato non di un errore di codifica o di configurazione, ma di un malinteso su come funzionano i cookie.

Quando il server vuole creare o modificare un cookie, lo fa con l'intestazione di risposta Set-Cookie . Qui, il server può anche specificare in che modo il browser deve trattare il cookie, ad es. per quanto tempo tenerlo, se è sicuro o meno, ecc. Questa informazione viene inviata solo una volta, quando il cookie viene creato per la prima volta.

Ad ogni richiesta, il client invia tutti i cookie al server nell'intestazione della richiesta Cookies . Quindi invia solo nomi e valori. Le informazioni aggiuntive (ad esempio il flag sicuro) non vengono inviate. Queste sono istruzioni dal server al client e non è necessario che il client ripeta le istruzioni sul server.

Quindi, un cookie è "sicuro" se il server include il flag secure nell'intestazione Set-Cookie . Ciò che il client invia nell'intestazione Cookies è irrilevante. Cercare di contrassegnare i cookie di richiesta come sicuri, così come è, non ha molto senso.

Quindi perché i cookie inviati non sono riportati come sicuri negli strumenti di sviluppo? È semplicemente perché il campo non è applicabile a loro, e quindi lasciato vuoto. Non so come farlo in IE, ma se passi a Chrome puoi ottenere un elenco di tutti i cookie nella scheda "Applicazione" e puoi facilmente vedere quali sono contrassegnati come sicuri.

Disclaimar: non sono un programmatore ASP.NET.

    
risposta data 11.10.2017 - 14:06
fonte

Leggi altre domande sui tag