Asp.net-Mvc
ASP MVC 3 cookie 失去 HttpOnly 和 Secure 標誌
我將 cookie 設置為我的 mvc 應用程序的一部分:
var cookie = new HttpCookie(CookieName, encryptedData) { Path = FormsAuthentication.FormsCookiePath, Domain = CookieDomain, Expires = authenticationTicket.Expiration, HttpOnly = true, Secure = IsSecure // true }; response.Cookies.Add(cookie);現在,如果我調試,我發現它一切正常,沒有問題,並且添加了它,這也很好。但是由於某種原因,當它實際到達瀏覽器時,沒有設置 HttpOnly 標誌或 Secure 標誌。所以我有點困惑…
我嘗試在 System.Web 下的 cookie web.config 條目中設置 HttpOnly 和 Secure 標誌:
<httpCookies httpOnlyCookies="true" requireSSL="true" />現在這是瀏覽器收到響應時的樣子:
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那麼我在這裡錯過了什麼嗎?還是有什麼我沒有設置在我應該設置的地方?我也在使用 CORS,因為這個 cookie 是從網路伺服器發出的,作為身份驗證機制。SSL 已啟用,並且還通過 https 用於呼叫。即使我關閉了安全 cookie 並使用了 http,也沒有設置 HTTPOnly 標誌,所以我很困惑。
=== 更新 ===
仔細檢查後,我似乎誤會了你,在你第一次收到 cookie 時,HttpOnly 響應是從伺服器正確發送的,但是!當 ajax 呼叫然後將 cookie 發送到伺服器時,它似乎沒有添加 httponly 標誌,這意味著被拋出的 cookie 不再安全。cookie 的安全部分不會在第一次響應時發送出去,但至少這會增加一點上下文。
試試這個,看起來像一個類似的問題。(如何在 ASP.NET 會話 Cookie 上設置安全標誌?)
在
<system.web>元素中,添加以下元素:<httpCookies requireSSL="true" />但是,如果您的塊
<forms>中有一個元素system.web\authentication,那麼這將覆蓋 中的設置httpCookies,將其設置回預設值 false。在這種情況下,您還需要將
requireSSL="true"屬性添加到表單元素。所以你最終會得到:
<system.web> <authentication mode="Forms"> <forms requireSSL="true"> /* forms content */ </forms> </authentication> </system.web>