2013-02-27 9 views
6

Sto installando i cookie come parte della mia applicazione MVC:ASP MVC 3 cookie di perdere HttpOnly e bandiere Sicuro

var cookie = new HttpCookie(CookieName, encryptedData) 
      { 
       Path = FormsAuthentication.FormsCookiePath, 
       Domain = CookieDomain, 
       Expires = authenticationTicket.Expiration, 
       HttpOnly = true, 
       Secure = IsSecure // true 
      }; 
      response.Cookies.Add(cookie); 

Ora, se metto a punto vedo che è tutto funziona bene, nessun problema e il suo aggiunto e questo è bene pure. Tuttavia, per qualche motivo, quando raggiunge effettivamente il browser, non vi è alcun flag HttpOnly o flag sicuro. Così Im un po 'perplesso ...

ho provato a fissare le HttpOnly e fissare le bandiere nella voce biscotto web.config sotto System.Web:

<httpCookies httpOnlyCookies="true" requireSSL="true" /> 

Ora ecco come la risposta appare quando il browser lo riceve:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-IIS/7.5 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Max-Age: 10000 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Headers: content-type, x-requested-with, * 
Access-Control-Allow-Origin: http://localhost:34567 
X-AspNetMvc-Version: 3.0 
X-AspNet-Version: 4.0.30319 
Set-Cookie: myCookie=53BA8AF84835A81E014B9174329D8543FBB6029B71C463C6FC1305D9F966F28EAA058FE103325C0F10A3012480FB0EF3F6C0BAC4703A6A6B725F383ADA35A5C125A0438FC42CADCB0DAB77953C967E6660E51C4113C6545220A0C2F86230F446D159D523BBE9CA4D9419A67BC44D23B9C4D0974DF2ED66C47EA7308D8E42E1C2280EA6059A23303E3BCBDF28F6BD4A3DFA92FFAB33DDAC8EC05D99310D26FBD6310252156CD28B89386B0D483D6D2E295EF33487E64468655371CC446E0B5DDBF12B3AA8218AF1FA929A98638A1AC729BA60815B86EAD9624ED1787172B585BE4E457C3568AB6EAAF4865E8468D04336FA7340AAC1BA75162FB322D436DC9BF50466F2F0FB3464ECF41C6C1F7001639DFE2AB2AD9CBFB65A292FE5FA42783DF331AA4641432647BA9672FE6D4C15F830E4DF8B38605852BCB15E5B01B862D966E2FD1D620730312982DB8AB4CE5EE0D0E40E6C3F5234DE5EBFA594036D912F07C3798ED429A2552AD6C4B9EC10B90749850CBDEC97F0BF7E2E43CB3991608C5D533B6EA9F8D0A7AD949B42CD3BAA13DEE99C330121B3D868B412A3435FA01C7F223641CFE441A2E07F5DFB8B23F053CBA13F5E1262A07FBFD4EC4BADF9BD5898; expires=Wed, 27-Feb-2013 19:15:24 GMT; path=/ 
Date: Wed, 27 Feb 2013 18:45:24 GMT 
Content-Length: 2 

Quindi mi manca qualcosa qui? o c'è qualcosa che non sto ponendo da qualche parte che dovrei essere? Sto anche utilizzando CORS perché questo cookie viene rilasciato da un server web come meccanismo di autenticazione. SSL è abilitato e viene anche utilizzato tramite https per le chiamate. Anche se spengo i cookie di sicurezza e uso http, anche il flag HTTPOnly non viene impostato, quindi sono sconcertato.

Aggiornamento === ===

Dopo aver ricontrollato sembra ti ho male informato, la risposta HttpOnly viene inviato dal server in modo corretto la prima volta che si riceve il cookie, TUTTAVIA! quando una chiamata ajax invia il cookie al server, sembra che non aggiunga il flag httponly, il che significa che il cookie gettato non è più sicuro. La parte sicura del cookie non viene inviata alla prima risposta, ma almeno questo aggiunge un po 'più di contesto a tutto questo.

risposta

10

Prova questo, sembra un problema simile. (How can I set the Secure flag on an ASP.NET Session Cookie?)

In the <system.web> element, add the following element:

<httpCookies requireSSL="true" /> 

However, if you have a <forms> element in your system.web\authentication block, then this will override the setting in httpCookies , setting it back to the default false.

In that case, you need to add the requireSSL="true" attribute to the forms element as well.

So you will end up with:

<system.web> 
    <authentication mode="Forms"> 
    <forms requireSSL="true"> 
     /* forms content */ 
    </forms> 
    </authentication> 
</system.web> 
+0

Grazie darà un andare, questa abitudine effetto HttpOnly però lo farà? o deve essere impostato su moduli o qualcosa del genere? Trovo strano se questo funziona come IMPOSTAZIONI MANUALMENTE per cookie, quindi non so perché non accetterà i dettagli inseriti. – Grofit

+0

Il bit dei moduli non funziona, solo mi dice che il web.config non è valido ma la documentazione non verrà caricata su MSDN, quindi non è del tutto sicuro se ci sono alcuni elementi figlio richiesti. – Grofit

+0

Anche se questa non era la risposta alla mia domanda, sono sicuro che la maggior parte delle persone che vengono qui avrà bisogno della soluzione che elencherai sopra, quindi ti segnerà come risposta. – Grofit

1

Sembra che questo è tutto un comportamento corretto, ho scritto un'altra domanda specifica circa il comportamento dei cookie cliente httponly, e che ha portato a un altro post ... che tana del coniglio.

What should be the correct behaviour of browser when sending and receiving httponly cookie via ajax?

In ogni caso, che sembra indicare il server deve mantenere la manomissione con il cookie di aggiungere il comportamento HttpOnly.

ho fatto un HttpModule personalizzato che controllerà per il cookie in questione e riapplicare il comportamento desiderato per il cookie (sulla base di configurazioni dal web.config)