2012-07-02 3 views
9

Ho ispezionato la nostra applicazione Web con la funzione di controllo negli strumenti di sviluppo di Google Chrome.Come comprendere un avviso di sicurezza in google chrome per una risorsa statica servita da Asp.net

Prima ho ricevuto un avviso che indica che stiamo servendo il nostro contenuto statico non memorizzabile nella cache: "Le seguenti risorse sono esplicitamente non memorizzabili nella cache.

Per risolvere questo ho aggiunto questo frammento al nostro web-config

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> 
</staticContent> 

come raccomandato in questo post del blog: http://blogs.msdn.com/b/carlosag/archive/2009/06/09/are-you-caching-your-images-and-scripts-iis-seo-can-tell-you.aspx

Se ora comincio una nuova revisione in Google Chrome, ho un nuovo avviso:

Le seguenti risorse memorabili nella cache contengono un'intestazione Set-Cookie . Questa vulnerabilità alla sicurezza può causare la condivisione dei cookie da parte di utenti multipli.

Puoi spiegare la potenziale minaccia alla sicurezza e quale è una possibile soluzione in Asp.net?

[Update]

Dopo un po 'di ricerche, credo che questo potrebbe essere correlato a questa domanda:

Why is ASP.NET forms authentication setting cookies on a static image request?

ma non riesco a mettere insieme il puzzle. La situazione non è esattamente la stessa, mentre la nostra applicazione potrebbe essere configurata per utilizzare l'autenticazione dei moduli, ho ricevuto l'avviso durante l'utilizzo dell'autenticazione di Windows.

+0

Sei sicuro che i due sono collegati all'evento? La minaccia alla sicurezza è abbastanza chiara, lo stesso cookie potrebbe essere utilizzato da più utenti, ovviamente non si tratta di un problema su un singolo computer. –

+0

@Ramhound Almeno gli strumenti di Chrome pensano che ci sia una connessione.Se rimuovo l'istruzione cache da webconfig, ricevo invece un altro avviso: Le seguenti risorse sono esplicitamente non memorizzabili nella cache. Considerare la possibilità di renderli memorizzabili nella cache se possibile: –

+0

È possibile aggiungere un'intestazione 'Cache-Control' con un valore 'private', che indica che la risorsa può essere memorizzata nella cache solo da un client ma non da macchine intermedie. In questo modo lo stesso cookie non dovrebbe essere restituito a client diversi. –

risposta

4

Sembra che il problema fosse realmente correlato all'autenticazione dei moduli. Dopo aver autenticato l'utente, impostiamo un certificato di autenticazione dei moduli. Questo coockie non ha set di percorsi, quindi verrà inviato per ogni richiesta, anche per le immagini statiche.

Sembra che il set di coockie sia stato ancora da una precedente sessione di debug anche se stavo testando l'autenticazione di Windows.

Penso che la soluzione migliore sarebbe quella di impostare un percorso per il coockie per evitare che venga inviato per le risorse statiche. Sfortunatamente non è possibile definire un percorso per tutte le nostre richieste di servizio, perché stiamo usando WC Ria Services e i servizi hanno un percorso virtuale creato un runtime.

La soluzione per ora è impostare il coockie solo nel browser. La voce aggiornata nella configurazione web è:

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" cacheControlCustom="private"/> 
</staticContent> 

La parte importante è il nuovo attributo cacheControlCustom.

Immagino che questo possa ancora essere un problema di sicurezza, se un browser è condiviso da più di un utente (ad esempio in un Internet café?), Ma questo non è uno scenario valido per il nostro progetto.