2013-02-27 12 views
6

ja ustawiania ciasteczka jako część mojego mvc aplikacji:ASP MVC 3 cookies utraty HttpOnly i bezpieczne flagi

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

Teraz jeśli debugować widzę, że jej wszystko działa bez zarzutu, nie ma problemów, a jego dodatkową i to dobrze także. Jednak z jakiegoś powodu, kiedy faktycznie dotrze do przeglądarki, nie ma ustawionej flagi HttpOnly ani flagi bezpieczeństwa. Więc jestem nieco zaskoczony ...

Próbowałem ustawienie HttpOnly i bezpieczne flagi w wejściu cookies web.config pod system.Web:

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

Teraz tutaj jest jak reakcja wygląda gdy przeglądarka odbiera:

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 

Więc czegoś tu brakuje? czy jest coś, czego nie planuję, gdzie powinienem być? Używam także CORS, ponieważ ten plik cookie jest wydany z serwera sieciowego jako mechanizm uwierzytelniania. Protokół SSL jest włączony i jest również używany przez protokół HTTPS dla połączeń. Nawet jeśli wyłączę bezpieczne pliki cookie i użyję http, flaga HTTPOnly również nie jest ustawiona, więc jestem zaskoczony.

=== Aktualizacja ===

Po dwukrotnie sprawdzane wydaje mi misinformed Ci odpowiedź HttpOnly jest wysyłany w dół z serwera poprawnie po raz pierwszy otrzymasz cookie, JEDNAK! kiedy wywołanie ajaxa wysyła ciasteczko na serwer, wydaje się, że nie dodaje flagi httponly, co oznacza, że ​​ciasteczko, które jest wyrzucane, nie jest już tak bezpieczne. Bezpieczna część pliku cookie nie jest wysyłana przy pierwszej odpowiedzi, ale przynajmniej dodaje do tego trochę więcej kontekstu.

Odpowiedz

10

Spróbuj tego, wygląda na podobny problem. (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

Dzięki dadzą mu szansę, to przyzwyczajenie wpływać na HttpOnly? czy to musi być ustawione na formularzach lub coś takiego? Uważam, że to dziwne, jeśli to działa tak jak RĘCZNIE ustawienie tego na plik cookie, więc nie wiem, dlaczego nie zaakceptuje wprowadzonych danych. – Grofit

+0

Format bitów nie działa, po prostu mówi mi, że plik web.config jest nieprawidłowy, ale dokumentacja nie ładuje się na MSDN, więc nie do końca wiadomo, czy są jakieś wymagane elementy potomne. – Grofit

+0

Chociaż nie była to odpowiedź na moje pytanie, jestem pewien, że większość osób przyjeżdżających tutaj będzie potrzebować rozwiązania, które wymieniłeś powyżej, więc oznaczy Cię jako odpowiedź. – Grofit

1

Wydaje się, że jest to poprawne zachowanie, pisałem kolejne pytanie konkretnie o zachowaniach klientów HttpOnly ciasteczka, a to doprowadziło do innego wątku ... Co króliczej nory.

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

mimo że wydaje się wskazywać, że serwer musi zachować manipulowanie cookie, aby dodać zachowanie HttpOnly.

zrobiłem niestandardową HttpModule, który będzie sprawdzał cookie w pytaniu i ponownie ubiegać się pożądane zachowanie do cookie (na podstawie konfiguracji z web.config)

Powiązane problemy