2

Apache サーバーのディレクトリに .htaccess ファイルがあります。現在、これは mod_auth_mysql を使用してユーザー検証を行い、ディレクトリ リストを表示します。ただし、ユーザーが既にアプリケーションにログインしている (したがって Cookie が存在する) 場合は、有効なユーザー要件をスキップして、複数のログインを排除したいと考えています。

現在の .htaccess

AuthName "Please don't hack the server, cheers"
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthType Basic
Auth_MYSQL on
Auth_MySQL_Host localhost
Auth_MySQL_User username
Auth_MySQL_Password password
AuthMySQL_DB auth
AuthMySQL_Password_Table users
Auth_MySQL_Username_Field username
Auth_MySQL_Password_Field password
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext
Auth_MySQL_Authoritative On
require user james

クッキーチェック

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^cookiename=ok$
RewriteRule .* / [NC,L]

これら 2 つを正しく組み合わせて、最初に Cookie を確認し、見つかった場合は許可し、Cookie が見つからない場合は有効なユーザーを確認するにはどうすればよいですか?

ありがとう

4

1 に答える 1

3

ここで 2 つのことを行う必要があります。SetEnvIfディレクティブを使用して環境変数を作成し、 Cookie. 次に、mod_auth_mysql に、認証を満たすための要件のセットを許可するように指示する必要があります。

最初に環境変数:

SetEnvIf Cookie cookiename=ok norequire_auth=yes

は、 Cookie: HTTP ヘッダーcookiename=okと照合する正規表現です。次に:Satisfy

Order Deny,Allow
Satisfy Any

# your auth stuff:
AuthName "Please don't hack the server, cheers"
AuthBasicAuthoritative Off
AuthUserFile /dev/null
AuthMySQL On
AuthType Basic
Auth_MYSQL on
Auth_MySQL_Host localhost
Auth_MySQL_User username
Auth_MySQL_Password password
AuthMySQL_DB auth
AuthMySQL_Password_Table users
Auth_MySQL_Username_Field username
Auth_MySQL_Password_Field password
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext
Auth_MySQL_Authoritative On
require user james

Allow from env=norequire_auth

したがって、 ifが満たされるか、またはifが満たされるSatisfy Any場合に許可される手段です。満足がなければ、アクセスを許可するために両方の行が満足される必要があります。require user jamesAllow from env=norequire_auth

Cookie は簡単に偽造される可能性があり、このシステムはページを保護するための適切な方法ではないことに注意してください。少なくとも、セッション ID などの Cookie の値を確認する必要があります。

于 2012-11-04T17:06:13.593 に答える