2013-02-27 15 views
6

Ich Cookies als Teil meiner MVC-Anwendung einstellen:ASP MVC 3 Cookies verlieren Httponly und sichere Flaggen

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

Nun, wenn ich mir debuggen, dass seine alle arbeiten gut, keine Probleme und ihr Mehr und das ist in Ordnung auch. Aus irgendeinem Grund jedoch, wenn es tatsächlich den Browser erreicht, gibt es kein HttpOnly-Flag oder Secure-Flag gesetzt. Also im ein bisschen verwirrt ...

Ich habe versucht, die Einstellung der Httponly und sichere Flaggen im Cookie web.config Eintrag unter System.Web:

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

Hier ist, wie die Antwort aussieht, wenn der Browser erhält es:

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 

Also fehlt mir hier etwas? oder gibt es etwas, das ich nicht irgendwo hinstelle, wo ich sein sollte? Ich benutze auch CORS, weil dieser Cookie von einem Webserver als Authentifizierungsmechanismus ausgegeben wird. SSL ist aktiviert und wird auch über HTTPS für Anrufe verwendet. Selbst wenn ich sichere Cookies ausschalte und http verwende, wird auch das HTTPOnly-Flag nicht gesetzt, so dass ich verwirrt bin.

=== aktualisieren ===

Doppel Nachdem geprüft es scheint ich falsch informiert Sie die Httponly Antwort wird nach unten von dem Server korrekt auf das erste Mal, wenn Sie das Cookie JEDOCH erhalten gesendet! Wenn ein Ajax-Aufruf dann den Cookie an den Server sendet, scheint er das httponly-Flag nicht hinzuzufügen, was dann bedeutet, dass der Cookie, der geworfen wird, nicht mehr so ​​sicher ist. Der sichere Teil des Cookies wird bei der ersten Antwort nicht gesendet, aber das fügt zumindest etwas mehr Kontext hinzu.

Antwort

10

Versuchen Sie dies, sieht aus wie ein ähnliches 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

Dank wird es versuchen, diese Gewohnheit Auswirkungen auf die HttpOnly obwohl wird es? oder muss das auf Formen oder etwas auch eingestellt werden? Ich finde es merkwürdig, wenn das funktioniert, wenn MANUALLY dies per Cookie setzt, also weiß ich nicht, warum es die eingegebenen Daten nicht akzeptieren würde. – Grofit

+0

Die Forms Bit funktioniert nicht, nur sagt mir, dass die web.config nicht gültig ist, aber die Dokumentation nicht auf MSDN geladen wird, also nicht ganz sicher, ob es einige erforderliche Kind Elemente gibt. – Grofit

+0

Obwohl dies nicht die Antwort auf meine Frage war, bin ich sicher, dass die meisten Leute, die hierher kommen, die oben aufgelistete Lösung benötigen, also werden Sie als die Antwort markiert. – Grofit

1

es so scheint, ist alles, das richtige Verhalten, schrieb ich eine andere Frage speziell über das Httponly-Client Cookie Verhalten, und das auf eine andere Stelle geführt ... was für ein Kaninchenbau.

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

Wie dem auch sei, das scheint der Server, um anzuzeigen, muss mit dem Cookie halten Manipulation der Httponly Verhalten hinzuzufügen.

ich einen benutzerdefinierten Httpmodule gemacht habe, die für das Cookie in Frage prüfen wird und erneut bewerben das gewünschte Verhalten zu den Cookie (basierend auf Konfigurationen aus der web.config)