典型的なWeb認証ワークフローは次のようになります。
通常、このトークンはCookieに保存されます。リクエスト内のトークンの存在と有効性により、リクエストを行っているクライアントが認証されているかどうかがサーバーに通知されます。トークンなし、エントリなし、つまりログインしていないのと同じです。だから...
ログアウトする代わりに、Cookieをワイプするだけでログアウトできますか?
質問で指定した理由により、よくあります。Cookieにセッショントークンがないと、一般的なWebアプリケーションはあなたが誰であるかを知りません。
Cookieをワイプするだけでなく、ログアウトボタンをクリックする場合の問題は何ですか?
OWASPセッション管理ガイドライン に従って認証を管理するWebアプリケーションは、明示的にログアウトすると、サーバー側のセッションを無効にします。セッショントークンを含むCookieを単に破棄すると、セッションがセッションハイジャックの対象になる可能性があります。
Webアプリケーションの開発のベストプラクティスに精通していない人のための類推としてのドアロックの使用(コメントでの議論のおかげ):
あなたのアカウントは、建物の部屋として見ることができます。ログインすると、建物の所有者がドアを作成して自動ロックをかけ、あなただけが入ることができるようにします。セッショントークンはキーであり、通常はブラウザーのCookieに保存されますが、他の場所に保存することもできます。
Cookieを削除したり、キャッシュをクリアしたりしてトークンを破棄すると、キーのコピーが破壊されます。
明示的にログオフすることは、建物の所有者に出入り口のレンガ造りを依頼することです。彼らがあなたのアカウントを保護することを保証するものは何もありませんが、ユーザーとしてあなたはあなたの願いを明示的に伝えています。
攻撃者がキーのコピーを取得するさまざまな方法(セッションハイジャック)があります。これは、ユーザーではなくサイト所有者が軽減する責任があります。
まず、攻撃者は推測することができます。サイトがセッションキーを順次生成する場合、または低エントロピーの疑似ランダム生成方法を使用する場合、これにより推測がはるかに容易になります。サイトは、高エントロピートークンと定期的なセッションリサイクルを使用してこれを軽減します。セッションをリサイクルしてもアクセスは妨げられませんが、不正なアクセスが許可された場合はそれが明らかになります。
次に、攻撃者はセッション固定を使用できます。ログイン前にキーを提供し、ログイン後も引き続き使用できます。サイトは、ログイン時にセッションを明示的にリサイクルすることでこれを軽減します。
第三に、中間者攻撃。攻撃者はあなたの鍵を直接見ることができます。 TLSはこれを軽減します。ダウングレード攻撃、安全でない実装、ゼロデイ攻撃を通じてTLSトラフィックを復号化することは可能ですが、これらはユーザーのドメインのはるか外にあり、まれであり、TLSに対するゼロデイ攻撃は発見されたときに多くのノイズを発生させる傾向があります(ハートブリード他)。
ユーザーとしての責任は、公共の駐車場での車のドアの施錠であるのと同じように、ログオフし、セキュリティで近道を行ったときの責任を負うことです。ドアロックが簡単にバイパスされている場合は、製造元の責任ではなく、製造元の責任です。
一部のWebサイトは、機密情報を含む可能性のあるHTML5ローカルストレージやフラッシュプレーヤーキャッシュなど、ユーザーのコンピューターにデータを保存する非Cookieベースの方法を利用しています。
たとえば、メールクライアントが下書きメールをローカルストレージに保存する場合があるため、誤ってページを更新したりブラウザを閉じたりした場合に、中断したところから再開できます。この機密データは通常、適切に設計されたWebサイトのログアウトボタンをクリックすると削除され、Cookieを削除するだけでは削除されません。
ログアウトする代わりに、Cookieをワイプするだけでログアウトできますか?
はい、ウェブアプリケーションはCookieを使用してお客様を一意に識別するため、Cookieを削除するとログアウトされます。
Cookieをワイプするだけでなく、ログアウトボタンをクリックする場合の問題は何ですか?
ログアウトボタンは、セッションを削除するリクエストを送信し、ブラウザのCookieを削除するためのレスポンスを返すという特別な目的を果たします。セッションを削除するリクエストを送信しない場合、セッションはまだサーバー側で有効なままです。セッションには最大の存続期間があり、ガベージコレクターによって最終的に削除されます。
リスクはありません。
セッションハイジャックのリスクが高まる可能性があると誰かが指摘しました。しかし、それは真実ではありません。アプリケーションにセッションがある(ステートフル)場合、このセッションにはタイムアウトがあります。そして、セッションが終了した後、ハイジャックするものは何もありません。セッションがアクティブな場合、アクティブユーザーのセッションをハイジャックする可能性は、「孤立した」セッションの場合とほとんど同じです。ブルートフォースセッションIDを試行する誰かの無効なセッションIDを持つ複数のリクエストをすばやく検出するツールを考慮に入れると、追加のリスクはありませんサーバー側。
クライアント側存在する可能性がありますログアウトの場合のリスクが高い Cookieを削除する場合よりも。ログアウトするとセッションが無効になりますが、他の機密データが保持される可能性があります。たとえば、Google Mailからログアウトしても、ユーザー名は引き続きCookieに保持されます。 Google Mailにアクセスすると、ユーザー名が事前に入力されています。まず、肩の後ろにいるユーザーにこのユーザーIDを見せたくない場合があります。次に、急いでいる場合、(複数のアカウントの)間違ったアカウントにログインする可能性があります。他のアプリケーションでも同様の問題が発生する可能性があります。あなたがクッキーを削除するとき、あなたがあなたが気付いていないものはあなたのブラウザに何も保存されていないのと同じように; Cookieに保存されているデータに驚かされることはありません。したがって、実際にログアウトした場合、否定的な驚きのリスクはCookieを削除した場合よりも高くなります。 Cookieを削除するときは、ローカルストレージの削除も検討する必要があります。
Cookieを削除する場合に見られる唯一の欠点は、セッションがタイムアウトするまでサーバーがセッションデータを保持するために、より多くのリソースを使用することです。しかし、OPでの問題は、クライアントのリスクについてです。したがって、リスクはありません。そして今日、ほとんどのアプリケーションはサーバー上に状態を持ちません。ログアウトとは、このような場合、トークンを無効にすることを意味します。多くの場合、セッションによってブロックされるリソースはありません。したがって、「孤立した」セッションでさえ、追加のリソースを必要としません。
考慮すべきもう1つの側面:アプリケーションとインターネット接続によっては、ログアウトに数秒というかなりの時間がかかる場合があります。 Cookie(およびローカルストレージ)の削除はすぐに行われ、サーバーやインターネット接続には依存しません。
誰かが私が見落とした他の重要なポイントを見つけ、私の見解を批判するかもしれません。それはいいです。私はユーザーにルールを盲目的に守るのではなく、実際に何が起こっているのかを考えるように促したかっただけです。