ホームページ  >  記事  >  バックエンド開発  >  ユーザー引数を実装するための PHP+APACHE メソッド_PHP チュートリアル

ユーザー引数を実装するための PHP+APACHE メソッド_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:02:17865ブラウズ

専門的な Web サイトでは、多くの場合、ユーザーのアカウントとパスワードが要求されますが、これは本人確認アクションです。初期の NCSA httpd サーバーはこのユーザー認証機能を提供しておらず、Webmaster は手動で本人認証 CGI プログラムを作成することしかできませんでした。
CERN httpd 以降のほとんどの Web サーバーは、ユーザー ID 検証の機能を提供しています。各 Web サーバーの設定は異なりますが、設定は似ています。

Apacheサーバーでのユーザー認証設定は以下の通りです。


<ディレクトリ /home/MyMember>
AuthType Basic
AuthName MyMember
AuthUserFile /usr/local/MyMember.txt
オプション ExecCGI を含む

有効なユーザーが必要
& lt;/リミット>

この例では、ユーザーが画像ファイルやその他のさまざまなファイルを含む、MyMember ディレクトリ内のすべてのファイルを表示するときに、ユーザーのアカウントとパスワードの確認が要求されます。ユーザーのアカウントとパスワードのファイルは /usr/local/MyMember.txt に存在します。

このアカウントのパスワード ファイル /usr/local/MyMember.txt は次の例のようになります。コロンの前の文字列はユーザ​​ー アカウントで、コロンの後の文字列は還元不可能に暗号化されたパスワードです。通常、パスワードの最初の 2 文字はシード (ソルト) に似た文字です。今回は全て3Pです。各行はユーザーを表します。もちろん、ウェブマスターは重複アカウントの状況を自分で制御する必要があります。特別なのは、Apache が Win32 システムで起動される場合、Win32 はこの領域
API でエンコーディングを提供しないため、コロン以降のパスワードを暗号化できないことです。したがって、ユーザー パスワードはクリア コー​​ドで存在します。

john1234:3PWudBlJMiwro
queenwan:3PFNVLNPN9W0M
noname00:3PEsXaJx5pk7E
wilson49:3PjoWb0EnaG22
rootboot:3PIt0snI6.84E
sun_moon:3 PvymMeNOc.x
nobody38:3PbskPKwV94hw

Apache バージョン 1.3.6 では、~apache/ を使用できます。 bin/htpasswd を使用して単一のアカウントとパスワードを生成できますが、大量のデータを必要とする商用サイトの場合は、それを処理する独自のプログラムを作成する必要がある場合があります。 UNIX では、エンコードを処理するには crypt() を呼び出す必要があります。



すべての設定が完了すると、接続時にブラウザにパスワード認証ウィンドウが表示されます。上の写真は、SEEDNet の MySEED Web サイトのユーザー認証メカニズムです。アカウント番号とパスワードを入力すると、ブラウザはそれをBASE64でエンコードしてサーバーに送信します。もちろん、BASE64 は暗号化ではなくエンコードだけなので、インターネット上でのこの種の通信のセキュリティはまだ高くありません。途中で実行者によって傍受され、その後 BASE64 に復元される可能性があります。これが最大の欠陥でもあります。おそらく、この問題は、将来的にはダイジェスト認証をサポートし、MD5 エンコーディングを使用することで解決される可能性があります。その後も、各ページでアカウントとパスワードが必要になりますが、ブラウザが自動的に送信するため、アカウントとパスワードを入力する必要はありません。この要素はブラウザを閉じるまで保持され、次回ブラウザを再実行するときに初めて入力する必要があります。

ユーザー数が少ない場合は、上記の方法を使用すると簡単で問題がありません。しかし、ユーザー数が数万人、場合によっては数十万人になると、アカウントのパスワードを検索することでサーバー全体の効率が低下し、ページを読むのに数十秒から数分かかることがあります。この場合、サーバーが提供するパスワード検査メカニズムを使用するのは賢明ではありません。 NSAPI を使用すると、Netscape Enterprise Server で独自のチェック方法を開発できます。また、IIS で ISAPI フィルタを使用することもできます。 NSAPI/ISAPI を呼び出す C/C++ プログラムを作成するのはいつも面倒です。PHP には別の選択肢があります。これもこのセクションのトピックです。


PHPのHTTP関連関数ライブラリはheader()関数を提供します。多くの Web サーバーとクライアントの対話では、この関数を使用して魔法を実行できます。たとえば、次のプログラムを PHP ページの先頭、つまり 1 行目または 2 行目に追加すると、ユーザーを作成者の Web ページにリダイレクトできます。


header("Location: http://wilson.gs");
exit
?>


もちろん、上記のプログラムの後に HTML テキストや PHP プログラムが表示されることはありません。ユーザー側。

同じ理由で、header() を使用してユーザー認証トリックを実行します。 PHPの開始時にユーザーに文字列を送信すると、ユーザーには以下のようなウィンドウが表示されます。


Header("WWW-Authenticate: Basic realm="Member"");
Header("HTTP/1.0 401 Unauthorized"); プログラムでは、文字列 realm= 「メンバー」 画像内に「メンバー」という単語が表示されます。 もちろん、代わりに漢字を使用すると、上の MySEED の画像のように、ブラウザ上にも漢字が表示されます。Web サイト ユーザーが英語や日本語など他の言語も話す場合、中国語のレルム文字列を送信するのは不適切であると思われます。いずれにせよ、これはサイトの性質とユーザーの指向によって異なります。

もちろん、これはまだ非常に大まかです。なぜなら、口座番号が正しく入力されても、間違って入力されても、結果は得られないからです。それを処理するには、より高度なプログラムが必要です。


バックエンド認証の観点からは、アカウントとパスワードを保存するバックエンドとしてデータベースを使用することを検討してください。このアーキテクチャは、10,000 ユーザーでも 100,000 ユーザーでも、多くのユーザーに対応できます。あなたのサイトにすでに何十万ものユーザー アカウントがある場合、おめでとうございます。あなたのサイトは世界クラスのサイトとみなされます。 MySQL は、商用 Web サイトを含め、多くの Web サイトでバックエンド データベースとして使用されています。もちろん、本格的な商用 Web サイトを構築したい場合で、費用が問題にならない場合は、最も広く評価されている Oracle データベース シリーズを使用できます。

PHP でデータベースを使用するには、まずデータベースのサーバーとクライアントをセットアップし、次に PHP と Apache システムをコンパイルする必要があります。

MySQL と PHP を準備したら、まず MySQL に新しいデータベースを追加します。もちろん、別の名前を使用することもできます。 MySQL をデータベース (データベース) に追加するのは簡単で、MySQL がデータベースを保存する mkdir を追加するだけです。たとえば、UNIX シェルで次のように入力します

hahaha:/usr/local/mysql/data# mkdir mymember

データベースを作成した後、使用する前にデータ テーブル (Table) を作成する必要があります。設定したテーブルは以下の通りで、/tmp/memberauth.sqlに格納できます


CREATE TABLE MemberAuth (
Serial mediaint(9) NOT NULL auto_increment,
Username char(8) NOT NULL,
Password char(8) NOT NULL,
Enable char(1) DEFAULT '0' NOT NULL,
PRIMARY KEY (Serial)
);

ファイル memberauth.sql

まず、memberauth.sql のこれらのフィールドを確認します。 Serial は、データが入力されるたびに自動的に 1 つずつ増加する整数フィールドです。したがって、これを空のフィールドにすることはできません。そのため、NOT NULL が使用されます。 2 番目のフィールドはユーザーのアカウントを表し、統一性とさまざまなシステムへの適応性を考慮して、このフィールドを空にすることはできません。パスワードは 3 番目のフィールドで、ユーザーのパスワードです。 4 番目のフィールドである Enable は、設計上、アカウントが有効かどうかを示すフラグとして使用され、0 は使用できないことを意味し、1 は将来、さまざまな目的で追加できることを意味します。

データテーブルを設計したら、データテーブルをデータベースに追加します。 MySQL データベースをよく使用するため、http://www.phpwizard.net/phpMyAdmin から phpMyAdmin をダウンロードし、ブラウザを使用して MySQL を操作および管理することができ、簡単で便利です。この phpMyAdmin セットを使用する場合は、そのユーザー インターフェイスに memberauth.sql を入力して MySQL に参加できます。または、UNIX シェルに次の数式を入力しても、同じ効果が得られます。

mysql mymember < /tmp/memberauth.sql

準備が完了したら、memberauth データ テーブルにユーザー アカウントとパスワードを入力できます。もちろん、phpMyAdmin を使用する方が便利です。mysql プログラムを使用するには、一連の INSERT が必要です。

そして、機能を設計する段階に入りました。


file://---------------------------
// ユーザー認証機能 auth.inc
/ / 著者: Wilson Peng
// Copyright (C) 1999
file://--------------------------------------
$error401 = " /home/phpdocs/error/401.php";
if ($PHP_AUTH_PW=="") {
Header("WWW-Authenticate: Basic realm="スーパーゴールドカード会員"");
Header("HTTP /1.0 401 Unauthorized");
include($error401);
exit;
} else {

$db_id = mysql_pconnect("localhost", "myid", "mypw");
$result = mysql_db_query("mymember" ,"パスワードを選択し、
from MemberAuth where username='$PHP_AUTH_USER'")を有効にします);

$row = mysql_fetch_array($result);
$MemberPasswd = $row[0];
$MemberEnable = $row[1];
if ($MemberEnable==0) {
echo "あなたのアカウントは無効になっています";
exit;

if ($PHP_AUTH_PW!=$MemberPasswd) {
Header("WWW-Authenticate: Basic realm= "スーパー ゴールド カードMember"");
include($error401);
}
?>Copyright (C) 1999, Wilson Peng
auth.inc では、各 PHP の最初の行に
このプログラムに追加されたすべての PHP ファイルはアカウントとパスワードをチェックしますが、画像などはチェックされません。Web サーバー機能を使用して特定のディレクトリ内ですべてをチェックするのに比べて、PHP ははるかに柔軟です。

$error401 = "/home/phpdocs/error/401.php";

この行は、ユーザーがキャンセルを押した場合、またはチェックが失敗した場合にユーザーに表示されるファイルを示します。

if ($PHP_AUTH_PW=="") {
Header("WWW-Authenticate: Basic realm="スーパーゴールドカード会員"")
Header("HTTP/1.0 401 Unauthorized"); ;
exit;
} else


else の前に、パスワードが入力されていない場合は、パスワードを入力するためのウィンドウが送信されます。このうち、
$PHP_AUTH_USER と $PHP_AUTH_PW は PHP の特別な変数で、それぞれユーザーが確認したアカウントとパスワードを表します。上記のプログラムは、これら 2 つの変数を使用してユーザー認証を処理します。

$db_id = mysql_pconnect("localhost", "myid", "mypw");
$result = mysql_db_query("mymember","パスワードを選択、
MemberAuth where username='$PHP_AUTH_USER'"); $row = mysql_fetch_array($result);
$MemberPasswd = $row[0];

ユーザーがアカウント番号とパスワードを入力すると、データベースにクエリが実行されます。ユーザーがまだ対応可能かどうかも確認してください。

if ($MemberEnable==0) {
echo "あなたのアカウントは無効になっています";
exit;
}

プログラムの最後の 4 行は、アカウントが無効になっている状況です。

if ($PHP_AUTH_PW!=$MemberPasswd) {
Header("WWW-Authenticate: Basic realm="スーパーゴールドカード会員"")
Header("HTTP/1.0 401 Unauthorized"); ;
終了;
}

パスワードが間違っている場合、ユーザーはアカウント番号とパスワードを再度入力するように求められます。

実際の使用では、追加するWebページに応じてauth.incファイルを追加できます。画像を表示する場合でもパスワードを確認する必要がなく、サーバーとユーザーの両方のリソースが削減されます。もちろん、MySQL に接続するには、mysql_pconnect() を使用して常に MySQL サーバーに接続できます。または、この関数を使用するたびに mysql_connect() を使用して再接続してください。必ず mysql_close() を使用してデータベースを早めに閉じてください。次のプログラム auth1.inc は認証プログラムの別のバージョンで、接続を開いてすぐに閉じてリソースを解放する例です。


file://---------------------------
// ユーザー認証機能-1 auth1 .inc
// 著者: Wilson Peng
// 著作権 (C) 1999
file://-------------------------------------
$error401 = "/home/phpdocs/error/401.php";
if ($PHP_AUTH_PW=="") {
Header("WWW-Authenticate: Basic realm="スーパー ゴールド メンバー""); 401 Unauthorized");
include($error401);
exit;
} else {

$db_id = mysql_connect("localhost", "myid", "mypw");
$result = mysql_db_query(" mymember","パスワードを選択し、
from MemberAuth where username='$PHP_AUTH_USER'")を有効にします);

$row = mysql_fetch_array($result);
$MemberPasswd = $row[0];
$MemberEnable = $row[1 ];
mysql_close ($db_id);
if ($MemberEnable==0) {
echo "あなたのアカウントは無効になっています"
}

if ($PHP_AUTH_PW!=$MemberPasswd) {
Header ("WWW-Authenticate: Basic realm="スーパーゴールドカード会員"");
Header("HTTP/1.0 401 Unauthorized");
include($error401);
exit;
}
}
?>



http://www.bkjia.com/PHPjc/316617.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/316617.html技術記事専門的な Web サイトでは、多くの場合、ユーザーのアカウントとパスワードが要求されますが、これは本人確認アクションです。初期の NCSA httpd サーバーは、このユーザー確認機能を提供していませんでした...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。