web-dev-qa-db-ja.com

基本HTTP認証からのログアウト

https://stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication に見られるように、いくつかの興味深い方法があります基本HTTP認証からユーザーをログアウトします。

現在、次のようにHTTP 401を送信しています。

GET logout.php

<?php
header('HTTP/1.1 401 Unauthorized', true, 401);
exit;

その後の要求で、ブラウザーから資格情報モーダルを求められます。 [キャンセル]をクリックすると、意図した結果であるHTTP 401応答が返されます。

これは内部アプリケーションであり、HTTPSが使用されます

これに潜在的なセキュリティ問題はありますか? LDAPモジュールを使用しています(つまり、基本的なHTTP認証です)。 Apacheは何らかの方法で資格情報を「キャッシュ」しますか、それとも資格情報はユーザーエージェントからのリクエストごとに検証されますか? user-agentからの有効な資格情報のないリクエストが常にHTTP 401応答を受信するようにするために何か他に必要なことはありますか?

6

基本的な認証情報は、ブラウザからのすべてのリクエストで送信されます。したがって、ブラウザを閉じない限り、従来から「ログアウト」できないのはなぜですか。

このアプローチが機能する理由は、ブラウザーがステートレスであるためです。通常、GET/POST/HEADリクエストを送信すると、200 OK応答を受信します。 401応答を受信すると、ユーザーに資格情報を要求し、これらの資格情報を使用して要求を再送信します。これらの資格情報が間違っている場合、サーバーは再び401応答を送信し、ブラウザーは再びプロンプトを出します。そのため、ブラウザーは401応答を受信すると、prevoiusリクエストで送信された資格情報が間違っていたと見なし、再度尋ねます。

資格情報をクリアし、ユーザーに新しい資格情報を要求するのはクライアント側の動作に依存しているため、制御できない何かに関連するリスクが常にあることに注意してください。

6
wireghoul