HTTP cookie標準では、cookieの名前と値に特定の文字のみを使用できます。 許可されていない文字を処理するために、ASP.NET Core を使用します。
- 応答 cookieを作成するときにエンコードします。
- 要求 cookieを読み取るときにデコードします。
ASP.NET Core 5.0 では、セキュリティ上の問題に応じて、このエンコード動作が変更されました。
ディスカッションについては、GitHub の 問題 dotnet/aspnetcore#23578 を参照してください。
導入されたバージョン
5.0 Preview 8
以前の動作
応答 cookie 名はエンコードされます。 要求 cookie 名がデコードされます。
新しい動作
cookie名のエンコードとデコードが削除されました。 サポートされている以前のバージョンの ASP.NET Core では、チームはデコードの問題をインプレースで軽減する予定です。 さらに、無効なIResponseCookies.Append名でcookieを呼び出すと、ArgumentException型の例外が発生します。 cookie値のエンコードとデコードは変更されません。
変更の理由
複数の Web フレームワークで問題が検出されました。 エンコードとデコードにより、cookieなどのエンコードされた値でのような予約済みプレフィックスをスプーフィングすることで、攻撃者が __Host-__%48ost-と呼ばれるセキュリティ機能をバイパスする可能性があります。 この攻撃には、クロスサイト スクリプティング (XSS) の脆弱性などのスプーフィングされた Cookie を Web サイトに挿入するためのセカンダリ攻撃が必要です。 これらのプレフィックスは、ASP.NET Core または Microsoft.Owin ライブラリまたはテンプレートでは既定では使用されません。
推奨されるアクション
プロジェクトを ASP.NET Core 5.0 以降に移動する場合は、その cookie 名が トークン仕様の要件 (コントロールと区切り記号を除く ASCII 文字 "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT) に準拠していることを確認します。
cookie名またはその他の HTTP ヘッダーで ASCII 以外の文字を使用すると、サーバーからの例外が発生したり、クライアントによって誤ってラウンドトリップされたりする可能性があります。
影響を受ける API
- HttpRequest.Cookies
- HttpResponse.Cookies
Microsoft.Owin.IOwinRequest.CookiesMicrosoft.Owin.IOwinResponse.Cookies
ASP.NET Core