web-dev-qa-db-ja.com

クッキー情報はサーバー側に保存されていますか?

クッキーはファイルとしてクライアント側にのみ保存されると思いました。次に、Cookieがサーバー側に保存されていない場合、サーバーは、クライアントから受信したCookieを、過去に作成されたセッションまたはその他の情報とどのように照合できるのでしょうか。

では、Cookie情報もサーバー側に保存されることは正しいのでしょうか?

サーバーはCookie情報をどのように保存しますか?

「クライアント側のCookie」と「サーバー側のCookie」について検索し、次のようないくつかのディスカッションに到達しました

ありがとう。

1
Tim

これはすばらしいセキュリティの質問です。安全なソフトウェアを構築していることを確認するために、彼らが作業するメカニズムを理解する必要があります。

セキュリティ

サーバーがCookie情報にアクセスできる場合、重大なセキュリティ上のリスクはありません。サーバーはすでに強力な保護が必要な特権システムです。

[コメント] ... [a]サーバーが新しいリクエストが以前のリクエストと同じユーザーからのものであることを特定する方法はありますか?

サーバーが暗号化または署名されたデータをクライアント側のCookieに保存する場合、サーバーはそれを確認できます。許可されたサーバーのみがそのCookieを格納できたと推測できます。

これの最新の良い例は、JWT- https://jwt.io/ です。これらはCookieで送信できますが、通常はWeb API HTTPリクエストの認証ヘッダーに入ります。 JWTについて理解を深めれば、Cookie内のデータ量を少なくするための単純なメカニズムでデプロイできる暗号化の原則を理解できます。

知識

サーバーは、クライアントから受信したCookieを、過去に作成されたセッションまたはその他の情報とどのように照合できますか?

Cookieは、タイムアウト後にクライアントのブラウザに保存され、その後、削除されます。サーバーへのすべてのHTTP要求で、それらはサーバーに自動的に送信されます。 Cookieは通常、クライアントではなくサーバーによって設定されます(可能です)。

サーバーは通常直接値を使用するか、またはが値を復号化してローカルデータベースルックアップ。たとえば、UserID値は暗号化されたCookieに保存できます。

Cookieを使用する主なアーキテクチャ上の理由は、ユーザーのIDにリンクされたセッションを維持することです。これらは分散データストアの一種としても使用されるため、サーバーはHTTP要求時にこの情報を取得しているため、ディスクやデータベースで検索する必要がなく、待ち時間が発生します。

セッションは、Webサーバーのメモリ内のキー(GUID)に関連付けられている場合もあれば、データベースの新しいセッションレコードのキーである場合もあります。どちらの場合も、keyはCookieによって中継されます。

サーバーはCookie情報をどのように保存しますか?

サーバーはそれらを格納することができますが、それは人々がそれらを概念的に見る方法ではありません。サーバーがデータを保存する方法では、セッションキーはレコード(データベースまたはハッシュ化された辞書参照)の主キーです。暗号化されたUserIDの場合、サーバー側にもキーがあります。ある意味では、クライアントはそれを「保存」するのではなく、キーのコピーに似ています。しかし、クライアントがサーバー側に保持されない個別の情報を保存することは可能であり、おそらく発生します。

サーバーが常にcookie情報の記録を持っているというのは本当ですか?

いいえ。サーバーにCookie情報のレコードがないシナリオは次のとおりです。

  • クライアント側のJavaScriptはCookieを設定します。例えば。 "OrganizationID = 10"は、ユーザーがすべてのブラウザタブで組織コンテキストを変更したことを示します。
  • サーバーは、ユーザーが保持する一部のデータを暗号化します。例えば。 "Roles = Admin、Developer、Staff"により、サーバーはデータベースで検索を行う必要なく機能にロールを適用できます。

Cookieはコンテキストに使用されるため、サーバーサイドは常にどこかにその情報を持っているとは限りません。 HTTPリクエストがある場合、サーバーはそのリクエストの送信者、サーバーに使用を許可されているロール、以前にアクセスしたことがあるかどうかを知る必要があります。

3
Todd