2013-02-27 3 views
6

내 MVC 응용 프로그램의 일부로 쿠키를 설정하고있다 : 이제ASP MVC 3 쿠키 잃고 Http 만 및 보안 플래그

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

내가 디버깅하면 나는 그것 모두가 잘 작동하지 아무런 문제와 추가 된 미세 이잖아 볼 너무. 그러나 실제로 브라우저에 도달 할 때 어떤 이유로 HttpOnly 플래그 나 보안 플래그가 설정되지 않습니다. 이제 여기

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

는 응답이 때 브라우저 모습입니다 : 그래서

나는 System.Web 아래에있는 쿠키의 web.config 항목에 Http 만 및 보안 플래그를 설정 시도 ... 조금 당황 메신저 그것을받습니다 :

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도 사용하고 있습니다. SSL은 사용 가능하며 https를 통해 호출 중에도 사용됩니다. 보안 쿠키를 해제하고 http를 사용하더라도 HTTPOnly 플래그가 설정되지 않으므로 당황 스럽습니다.

=== 업데이트 ===

는 더블 그러나, 나는 당신을 잘못 알고 계시는 나타나면 Http 만 응답이 당신이 쿠키를받을 처음에 제대로 서버에서 내려 보내 확인 데! 아약스 호출이 서버에 쿠키를 보내면 httponly 플래그를 추가하지 않는 것 같습니다. 그러면 Throw되는 쿠키가 더 이상 안전하지 않습니다. 쿠키의 보안 부분은 첫 번째 응답에서 보냈지 만, 적어도 이것으로 인해 조금 더 많은 컨텍스트가 추가됩니다.

답변

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 효과가 있습니까? 또는 그것도 양식이나 무언가에 설정해야합니까? 나는이 쿠키가 매 쿠키마다 수동으로 설정되어 있기 때문에 이상하게 느낀다. 그래서 나는 입력 된 내용을 받아들이지 않는 이유를 모른다. – Grofit

+0

양식 비트가 작동하지 않습니다. web.config가 유효하지 않지만 MSDN에서 설명서가로드되지 않으므로 필요한 하위 요소가 있는지 확실하지 않습니다. – Grofit

+0

이것이 내 질문에 대한 답변이 아니었지만, 여기에 오는 대부분의 사람들이 위에 열거 한 해결책을 필요로 할 것이므로 응답으로 표시 할 것입니다. – Grofit

1

모든 올바른 동작입니다, 나는 Http 만 클라이언트 쿠키의 행동에 대해 특별히 다른 질문을 쓰고, 그것은 또 다른 후 ... 어떤 토끼 구멍되었다.

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

어쨌든 서버가 Http 만 동작을 추가 할 수있는 쿠키 변조 유지해야 나타냅니다 보인다. 나는 문제의 쿠키를 확인하고하는 사용자 정의 HttpModule을 만든

(Web.config의에서 구성 기준) 쿠키 한번 풀어 줄 것이다