セッションCookieを設定する安全な方法は、Secure
フラグとHttpOnly
フラグを指定したSet-Cookie
ヘッダーを使用することです。しかし、HTTP応答(および要求)本体内でのCookieの送信にセキュリティ上の問題はありますか?たとえば、次のように:
HTTP/1.1 200 OK
Date: Wed, 07 Sep 2016 09:23:37 GMT
.........
.........
.........
sessioncookie=abcdefgh
また、Set-cookie
を使用してCookieを設定し、同じHTTP応答でHTTP応答の本文も送信すると、セキュリティが低下しますか?
cookies を応答の本文に設定することはできません(ブラウザーはCookieをそこから探しません)。また、ブラウザーは要求の本文にCookieを表示することもできません(サーバーはそこを探しません)。定義により、CookieはHTTPヘッダーで伝達されます( RFC 6265 を参照)。
リクエストまたはレスポンスの本文で他のセッションデータやトークンを送信することはできますが(例: CSRFトークン を本文で渡すのが一般的です)、そうする場合はCookieではありません。これが良いアイデアかどうかは別の問題です。
ほとんどのデータは本文では問題ありませんが、結局それはユーザーが表示できる唯一の部分であり、ユーザーには機密データを表示する必要がある場合があります。
ただし、一部のデータは本文で問題があります。たとえば、XSS攻撃で利用できないようにしたいものは、本文に含めることはできず、 Http-only cookie にのみ含める必要があります。 [〜#〜] dom [〜#〜] 。
とはいえ、一部のデータは本文の方が適しています。たとえば、デフォルトで表示したくないものIISログは本文に配置する必要があります。偽装リクエスト(CSRFとも呼ばれる)に乗るセッションに含めたくないものは、本体ではなく、クッキーとして含まれています。
Cookieと本文の両方にトークンを設定することは、必ずしもセキュリティ上の問題ではありません。実際、これは Double Submit Cookie CSRF緩和策 で必要なパターンとまったく同じです。
一方、本体のセッションIDを渡すだけで、それが HttpOnly cookie の複製である場合は、HttpOnlyを使用する利点をすべて無効にしています。同じ値をDOMから読み取ることができるため。
また、これは本当に楽しいものです:サイトがサーバー側からHttpOnly Cookieを設定し、同じCookie値がページ本体を介して渡され、クライアントスクリプトを介して設定された場合、ブラウザーは同じ名前の2つのCookieで終わります!この場合、どのCookieを提示する必要があるかを示すHTTP仕様がなく、ブラウザの動作が異なるため、この状態は回避する必要があります。