2

mod_authn_otp認証用に Apache HTTPD サーバーとそのモジュールをインストールしました。すべて正常に動作します。

ただし、小さな問題が 1 つあります。ユーザー セッションを「終了」できません。ドキュメントを読んで、これを行う方法を見つけました。mod_authn_otpのドキュメントには次のように書かれています。

ログアウト

HTTP 認証は本質的にステートレスであるため、実際の「ログイン」プロセスはありません。各 HTTP 要求には、独自の認証が必要です。同様に、「ログアウト」プロセスもありません。つまり、ブラウザが「ログイン」することはないため、ユーザーまたはサーバーがユーザーのブラウザの「ログアウト」を強制する方法はありません。mod_authn_otp を使用すると、最大リンガー時間に達したときに「ログアウト」が正確に発生します。

実際には、サーバーがユーザーを「ログアウト」する方法があります。それは、401 Unauthorized HTTP エラー コードを返すことです。これにより、ブラウザは使用していたユーザー名とパスワードのペアを「忘れ」、新しいペアを要求します。ただし、これはスクリプト レベルで (たとえば、PHP スクリプトを介して) 行う必要があります。また、これはそのユーザーのブラウザを「ログアウト」するだけです。最大リンガー タイム内に別のブラウザから同じワンタイム パスワードを使用できた攻撃者は、引き続き侵入することができます。

したがって、次のように HTTP エラーを返す小さな bash スクリプトを作成しました。

#/bin/bash
echo -e 'HTTP/1.0 401 Unauthorized'
echo -e 'WWW-Authenticate: Basic realm=\"mod_authn_otp\"’

ただし、このスクリプトを呼び出すと、認証プロンプトが再度表示され、正しい詳細を入力しても認証に失敗します。また、このスクリプトでは HTTP エラー ページがリダイレクトされません。助けてください。

前もって感謝します!

4

2 に答える 2

0

ブラウザを閉じて再度開いたときにのみ、ポップアップ メニューから自分自身を再度認証できます

最大リンガー タイム内に別のブラウザから同じワンタイム パスワードを使用できた攻撃者は、引き続き侵入することができます。

401 リクエストを送信する代わりに、不正な資格情報を送信してみてください。

于 2013-09-19T02:38:54.653 に答える
0

クライアントが正しい資格情報を入力すると、スクリプトは 401 を返し、クライアントはそれらを正しくないと解釈します。だから、あなたが望むようにではなく、あなたが設計したように機能しています。

認証に失敗する ajax リクエストを送信してから、成功するが実際の認証に失敗する一時資格情報を含むリクエストを送信することで、それを回避するためのJS ハックがあります。

それ以外の場合は、ユーザー トレーニングによって回避する必要があります。ブラウザのすべてのインスタンスを閉じるか、ログアウト ページで [キャンセル] を使用するようにユーザーに指示し、再度ログインするためのホームページへのリンクを提供します。

于 2013-09-25T11:17:42.403 に答える