2013-02-27 57 views
6

我設置cookie作爲我的MVC應用程序的一部分:ASP MVC 3餅乾失去的HttpOnly和安全標誌

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

現在,如果我調試我看到它的所有工作正常,沒有問題,其增加和多數民衆贊成罰款太。但是,由於某種原因,當它實際上到達瀏覽器時,沒有設置HttpOnly標誌或安全標誌。所以,我是一個有點困惑...

我已經試過的System.Web中下cookie的web.config中的條目設置的HttpOnly和安全標誌:

<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是從web服務器發出的認證機制。 SSL已啓用,並且也正在通過https使用呼叫。即使我關閉了安全cookie並使用http,HTTPOnly標誌也沒有被設置,所以我很困惑。

===更新===

已經雙重檢查看來我誤導大家,僅Http響應從服務器發送正確的倒在你收到的cookie第一次不過!當ajax調用然後將cookie發送到服務器時,它似乎不會添加httponly標誌,這意味着被拋出的cookie不再安全。 cookie的安全部分不會在第一個響應中發送,但至少會爲此添加更多的上下文。

回答

10

試試這個,看起來像一個類似的問題。 (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

由於將搏一搏,這不會只會影響HttpOnly?還是需要在表單上設置呢?我覺得這很奇怪,如果這樣做是爲了手動設置每個cookie,所以我不知道爲什麼它不會接受輸入的細節。 – Grofit 2013-02-27 19:26:15

+0

窗體位不會工作,只是告訴我web.config無效,但文檔不會在MSDN上加載,所以不能完全確定是否有一些必需的子元素。 – Grofit 2013-02-27 19:55:07

+0

雖然這不是我的問題的答案,但我相信大多數來這裏的人都需要上面列出的解決方案,因此將標記爲答案。 – Grofit 2013-02-28 14:05:31

1

看起來這是正確的行爲,我特地寫了另一個問題有關的HttpOnly客戶端的cookie行爲,並導致另一篇文章...什麼是兔子洞。

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

反正這似乎預示着服務器需要保持與cookie來添加行爲的HttpOnly篡改。

我做了一個自定義的HttpModule將在確認問題的cookie,並重新申請所需的行爲到cookie(根據配置從web.config)