Apacheサーバーのユーザー認証

WBOY
リリース: 2016-06-21 09:08:38
オリジナル
993 人が閲覧しました

apache|サーバー

著者: Xu Hui

インターネットを頻繁にサーフィンする読者は、この状況に遭遇することがあります。一部の Web サイト上の特定のリソースにアクセスすると、ブラウザーは、リソースにアクセスするためのユーザー名とパスワードを求めるダイアログ ボックスをポップアップ表示します。ユーザー認証を行う技術です。ユーザー認証は、ネットワーク システム リソースを保護するための最初の防御線であり、すべてのログインを制御し、アクセス ユーザーの正当性をチェックします。その目的は、正当な権限を持つ正当なユーザーのみがネットワーク システム リソースにアクセスできるようにすることです。基本的なユーザー認証技術は「ユーザー名+パスワード」です。

Apache は現在、Linux、Unix、Windows およびその他のオペレーティング システムで実行できる人気の Web サーバーであり、「ユーザー名 + パスワード」認証の問題を十分に解決できます。 Apache ユーザー認証に必要なユーザー名とパスワードは 2 つの異なる方法で保存されます。1 つはテキスト ファイルで、もう 1 つは MSQL、Oracle、MySQL などのデータベースです。 LinuxのApacheを例に、これら2つのストレージ方式それぞれのユーザー認証機能の実装方法を紹介するとともに、WindowsのApacheユーザー認証についても簡単に説明します。

1. テキスト ファイル ストレージを使用する

この認証方法の基本的な考え方は、Apache が認証機能を開始した後、アクセスを制限する必要があるディレクトリに .htaccess という名前のファイルを作成し、認証を指定します。設定コマンド。ユーザーがこのディレクトリ内のファイルに初めてアクセスすると、ブラウザーはユーザーの身元を確認するためにユーザー名とパスワードの入力を求めるダイアログ ボックスを表示します。正規のユーザーの場合は、アクセスしたページのコンテンツが表示されます。その後、アクセスしたディレクトリ内のすべてのページに対して、ブラウザーがユーザー名とパスワードを自動的に送信するため、再入力する必要はありません。ブラウザが閉じられています。実装の具体的な手順は次のとおりです。

Apache 1.3.12 がコンパイルされ、/usr/local/apache ディレクトリにインストールされていると仮定して、スーパー ユーザー root として Linux を入力します。デフォルトでは、Apache のコンパイル時に mod_auth モジュールが自動的に追加されます。このモジュールを使用すると、テキスト ファイルを保存方法として使用する「ユーザー名 + パスワード」認証機能を実装できます。

1. Apache の設定ファイル /usr/local/apache/conf/httpd.conf を変更し、認証リソースが配置されているディレクトリの設定コマンドを設定します。

次の例は、/usr/local/apache/htdocs/members ディレクトリの構成です:


<ディレクトリ /usr/local/apache/htdocs /members>

Options Indexes FollowSymLinks

allowoverride authconfig

orderこのうち、allowoverride authconfig 行は、/usr/local/apache/htdocs/members ディレクトリ内のファイルに対してユーザー認証が許可されていることを示します。

2. アクセス制限ディレクトリ /usr/local/apache/htdocs/members に次の内容のファイル .htaccess を作成します:

AuthName "Member Area"

AuthType Basic

AuthUserFile/usr/local/apache / members.txt

require valid-user


説明: ファイル .htaccess で一般的に使用される設定コマンドは次のとおりです:


1) AuthName コマンド: 認証ゾーン名を指定します。ゾーン名は、認証を求めるダイアログ ボックスにユーザーに表示されます。

2)AuthTypeコマンド: 認証タイプを指定します。 HTTP 1.0 では、認証タイプは Basic の 1 つだけです。 HTTP1.1 には、MD5 などのいくつかの認証タイプがあります。

3) AuthUserFile コマンド: ユーザー名とパスワードを含むテキスト ファイルを 1 行に 1 組指定します。

4) AuthGroupFile コマンド: ユーザー グループのリストとこれらのグループのメンバーのリストを含むテキスト ファイルを指定します。グループのメンバーは、managers:user1 user2 のようにスペースで区切られます。

5) require コマンド: アクセスを許可できるユーザーまたはグループを指定します。例:

require user user1 user2 (user1 と user2 のみがアクセスできる)

require group manager (グループ マネージャーのメンバーのみがアクセスできる)

require valid-user (AuthUserFile で指定されたファイル内のすべてのユーザーがアクセスできる)

3. Apache に付属のプログラム htpasswd を使用して、ユーザー名とパスワードを含むテキスト ファイルを生成します: /usr/local/apache/members.txt。各行の形式は「ユーザー名:パスワード」です。


#cd /usr/local/apache/bin

#htpasswd -bc ../members.txt user1 1234

#htpasswd -b ../members.txt user2 5678

テキストファイル members.txt には次の内容が含まれます2 人のユーザー: user1、パスワードは 1234、user2、パスワードは 5678。ユーザーによるダウンロードを避けるため、このテキスト ファイルを Web ドキュメントのディレクトリ ツリーに保存しないでください。

htpasswd プログラムのヘルプについては、htpasswd -h を実行してください。

ユーザー数が比較的少ない場合、この方法はユーザー認証に手間がかからず便利で、メンテナンスも簡単です。しかし、ユーザー数が数万人、さらには数十万人になると、ユーザーを見つけるのにある程度の時間がかかり、サーバーの効率が低下します。この場合、データベース方式を使用する必要があります。
2. データベース ストレージを使用する

現在、Apache、PHP4、および MySQL は、Linux で Web サイトを構築するための最良のパートナーです。これらの 3 つのソフトウェアはすべてフリー ソフトウェアです。この 3 つを組み合わせ、HTTP プロトコル経由で PHP4 と MySQL を使用して、Apache のユーザー認証機能を実装します。

ユーザー認証は、PHP4 が Apache モジュールとして実行されている場合にのみ可能です。このため、Apache をコンパイルする場合は、PHP4 モジュールを追加して一緒にコンパイルする必要があります。 Apache のモジュールとして PHP4 を使用することを想定し、Apache を /usr/local/apache ディレクトリにコンパイルしてインストールし、MySQL を /usr/local/mysql ディレクトリにコンパイルしてインストールします。次に、次の手順に進みます。

1. MySQL でデータベース メンバーを作成し、その中に正当なユーザーのユーザー名とパスワードを保存するテーブル users を作成します。

1) vi コマンドを使用して、/tmp ディレクトリに SQL スクリプト ファイル auth.sql を作成します。内容は次のとおりです。

データベース メンバーを作成します。 users (

username char(20) not null,

password char(20) not null,

);

users に挿入 value("user1",password("1234")); value("user2 ",password("5678"));

2) MySQL クライアント プログラム mysql を起動し、上記の SQL スクリプト ファイル auth.sql のコマンドを実行し、users テーブルに 2 つのユーザー レコードを追加します。

#mysql -u root -pmypwd</tmp/auth.sql

2. PHP スクリプトのヘッダー ファイル auth.inc を作成します。 プログラムの内容は次のとおりです。 ( WWW-authenticate: Basic realm="メンバーエリア");

Header(HTTP/1.0 401 Unauthorized);

echo "正しいユーザー名とパスワードを入力する必要があります。n"; function CheckUser($uname, $pwd) {

if ($uname == "" || $pwd == "") return 0;

$query = "ユーザーからユーザー名、パスワードを選択 WHERE ユーザー名=$uname およびパスワード =password($pwd)";

$db_id = mysql_connect(localhost, oot, mypwd);

mysql_select_db(member,$db_id);

$result = mysql_query($query, $db_id);

$ num =mysql_num_rows($result);

mysql_close($db_id);

if ($num>0) { // 有効なログイン

} else {

return 0;
}

}

?>

関数Authenticate()は、関数Header(WWW-authenticate:basic realm="member area")を使用して認証要求メッセージをブラウザに送信し、ブラウザをポップアップさせます。ユーザー名/パスワードダイアログボックスを開きます。ユーザーがユーザー名とパスワードを入力すると、この PHP スクリプトを含む URL が自動的に再度呼び出され、ユーザー名、パスワード、認証タイプが PHP4 の 3 つの特殊変数 $PHP_AUTH_USER、$PHP_AUTH_PW、$PHP_AUTH_TYPE に保存されます。 PHP プログラムは、これら 3 つの変数の値に基づいてユーザーが合法であるかどうかを判断できます。 Header() 関数では、basic は基本認証タイプを表し、realm の値は認証ゾーン名を表します。

関数ヘッダー (HTTP/1.0 401 Unauthorized) により、ブラウザ ユーザーは間違ったユーザー名またはパスワードを連続して複数回入力すると、HTTP 401 エラーが発生します。

関数 CheckUser() は、ブラウザ ユーザーによって送信されたユーザー名とパスワードが MySQL データベースのものと同じであるかどうかを判断するために使用されます。同じである場合は 1 を返し、そうでない場合は 0 を返します。 mysql_connect(localhost, oot, mypwd) のデータベース ユーザー名 root とパスワード mypwd は、独自の MySQL 設定に従って変更する必要があります。

3. アクセスを制限する必要がある各 PHP スクリプトの先頭に次のプログラム セグメントを追加します。


require(auth.inc);

if (CheckUser($PHP_AUTH_USER,$PHP_AUTH_PW) 0) {

authenticate();

} else {

echo "これは正規のユーザーがアクセスしたい Web ページです。" // この行を正規のユーザーへの Web ページ出力に変更します

}

?>

Place 正規のユーザーに表示する必要がある Web ページのコンテンツは、上記のプログラム セグメントの 1 行を置き換えて else 節に配置されます。

echo 「これは正規のユーザーがアクセスしたい Web ページです。」 ;

このように、ユーザーが PHP スクリプト プログラムにアクセスする際には、ユーザーの身元を確認するためにユーザー名とパスワードが必要になります。

3. Windows の Apache ユーザー認証

1. テキスト ファイルを使用してユーザー名とパスワードを保存する場合、方法は以前と同じですが、パスを表すディレクトリ名とディレクトリの間にスラッシュが使用されることに注意してください。名前とファイル名はバックスラッシュ "" ではなく行 "/" で区切られます。

2. MySQL データベースを使用してユーザー名とパスワードを保存する場合は、まず次の方法に従って PHP 4.0.3 を Apache モジュールとして実行し、次に上記の「ユーザー名とパスワードを保存するデータベースを使用したユーザー認証」の方法に従って完了します。 。

1) Windows バージョンの Apache 1.3.12、PHP 4.0.3、および MySQL 3.2.32 をダウンロードし、3 つのソフトウェアを解凍して、それぞれ C:apache、C:PHP4、および C:mysql ディレクトリにインストールします。

2) C:PHP4SAPI ディレクトリには、一般的に使用される Web サーバー用のいくつかの PHP モジュール ファイルが含まれています。php4apache.dll を Apache のモジュール サブディレクトリ (C:apachemodules) にコピーします。

3) Apache の設定ファイル C:apacheconfhttpd.conf を変更し、次の行を追加します:

LoadModule php4_module modules/ php4apache.dll

AddType application/x-httpd-php .php3

AddType application/x-httpd-php -source .phps

AddType application/x-httpd-php .php

最初の行は、ユーザー認証を実行できるように、PHP4 に Apache モジュールとして実行するよう指示します。最後の 3 行は、PHP スクリプト プログラムの拡張子を定義します。

4) autoexec.bat ファイルの PATH コマンドに、PHP4 が存在するパス「C:PHP4」を追加し、コンピュータを再起動します。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート