9

mvcアプリケーションの一部としてCookieを設定しています。

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の下のcookieweb.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

だから私はここで何かが欠けていますか?それとも、あるべき場所に設定していないものがありますか?このCookieは認証メカニズムとしてWebサーバーから発行されるため、私もCORSを使用しています。SSLが有効になっており、httpsを介して通話にも使用されています。セキュアCookieをオフにしてhttpを使用しても、HTTPOnlyフラグも設定されていないため、困惑しています。

===更新===

もう一度確認したところ、誤って通知したようですが、Cookieを初めて受信したときに、サーバーからHttpOnly応答が正しく送信されます。その後、ajax呼び出しがCookieをサーバーに送信すると、httponlyフラグが追加されていないように見えます。これは、スローされているCookieの安全性が低下していることを意味します。Cookieの安全な部分は最初の応答では送信されませんが、少なくともこれにより、すべてにもう少しコンテキストが追加されます。

4

2 に答える 2

11

これを試してみてください。同様の問題のようです。( ASP.NET セッション Cookie に Secure フラグを設定するにはどうすればよいですか? )

要素に、次の<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>
于 2013-02-27T19:01:38.777 に答える
2

これはすべて正しい動作のようです。httponly クライアント Cookie の動作について具体的に別の質問を書き、それが別の投稿につながりました...なんてうさぎの穴でしょう。

ajax経由でhttponly Cookieを送受信するときのブラウザの正しい動作は何ですか?

とにかく、サーバーが HttpOnly 動作を追加するために Cookie を改ざんし続ける必要があることを示しているようです。

問題のCookieをチェックし、必要な動作をCookieに再適用するカスタムhttpmoduleを作成しました(web.configの構成に基づいて)

于 2013-02-27T21:28:29.260 に答える