ホームページ >バックエンド開発 >PHPチュートリアル >PHP フォームベースのパスワード認証と HTTP 認証の使用例、フォーム example_PHP チュートリアル

PHP フォームベースのパスワード認証と HTTP 認証の使用例、フォーム example_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:10:13915ブラウズ

phpフォームベースのパスワード検証とHTTP検証の使用例、フォームの例

この記事の例では、PHP フォームベースのパスワード認証と HTTP 認証の使用方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

PHP の HTTP 認証メカニズムは、PHP が Apache モジュールとして実行されている場合にのみ機能するため、この機能は CGI バージョンには適用されません。 Apache モジュールの PHP スクリプトでは、header() 関数を使用して「認証が必要」情報をクライアント ブラウザに送信し、ユーザー名とパスワードの入力ウィンドウをポップアップ表示させることができます。ユーザーがユーザー名とパスワードを入力すると、URL を含む PHP スクリプトによって事前定義された変数 PHP_AUTH_USER、PHP_AUTH_PW、および AUTH_TYPE が追加され、これら 3 つの変数がそれぞれユーザー名、パスワード、認証タイプに設定されます。事前定義された変数は、$_SERVER または $HTTP_SERVER_VARS 配列に保存されます。 「ベーシック」および「ダイジェスト」(PHP 5.1.0 以降) 認証方法をサポートします。興味のある方は header() 関数関連の情報を参照してください。

PHP バージョンの問題: $_SERVER などを含む Autoglobals グローバル変数は PHP 4.1.0 以降で有効であり、$HTTP_SERVER_VARS は PHP 3 以降で有効です。

以下は、ページでクライアント認証を強制するスクリプトの例です。

例 34-1. 基本的な HTTP 認証の例

コードをコピーします コードは次のとおりです:
if (!isset( $_SERVER [ 'PHP_AUTH_USER' ])) {
header ( 'WWW-Authenticate: Basic realm="My Realm"' ); ヘッダー ( 'HTTP/1.0 401 Unauthorized' ); echo 'ユーザーがキャンセルボタンを押した場合に送信するテキスト' ; 出る
} その他 {
echo "

こんにちは { $_SERVER [ 'PHP_AUTH_USER' ]} .

; echo "

パスワードとして { $_SERVER [ 'PHP_AUTH_PW' ]} を入力しました。

}
?>

例 34-2. ダイジェスト HTTP 認証の例

この例では、単純なダイジェスト HTTP 認証スクリプトを実装する方法を示します。詳細については、RFC 2617 を参照してください。

コードをコピーします

コードは次のとおりです:

$realm = '制限エリア' ; //ユーザー => パスワード $users = array( 'admin' => 'mypass' , 'guest' => 'guest' ); if (!isset( $_SERVER [ 'PHP_AUTH_DIGEST' ])) { ヘッダー ( 'HTTP/1.1 401 Unauthorized' ); ヘッダー ( 'WWW-Authenticate: Digest realm="' . $realm .
'" qop="auth" nonce="' . uniqid (). '" opaque="' . md5 ( $realm );
Die( 'ユーザーがキャンセルボタンを押した場合に送信するテキスト' ); }
// PHP_AUTH_DIGEST 変数を分析します
preg_match ( '/username="(?P.*)",s*realm="(?P.*)",s*nonce="(?P.*)", s*uri="(?P.*)",s*response="(?P.*)",s*opaque="(?P.*)",s* qop=(?P.*),s*nc=(?P.*),s*cnonce="(?P.*)"/' , $_SERVER [ 'PHP_AUTH_DIGEST' ]、$ダイジェスト ); if (!isset( $users [ $digest [ 'ユーザー名' ]]))
Die( 'ユーザー名が無効です!' );
// 有効な応答を生成します
$A1 = md5 ( $digest [ 'ユーザー名' ] . ':' . $realm . ':' . $users [ $digest [ 'ユーザー名' ]]); $A2 = md5 ( $_SERVER [ 'REQUEST_METHOD' ]. ':' . $digest [ 'uri' ]); $valid_response = md5 ( $A1 . ':' . $digest [ 'nonce' ]. ':' . $digest [ 'nc' ]. ':' . $digest [ 'cnonce' ]. ':' . $digest [ 'qop' ] . $A2 ); if ( $digest [ 'response' ] != $valid_response )
Die( '認証情報が間違っています!' ); // OK、有効なユーザー名とパスワード
echo 'あなたは次のようにログインしています: ' . $digest [ 'username' ]; ?>

互換性の問題: すべてのクライアントとの互換性を確保するには、キーワード「Basic」の最初の文字を大文字で「B」にし、区切り文字列を大文字と小文字で囲む必要があります。一重引用符ではありません); ヘッダー行 HTTP/1.0 401 では、401 の前にスペースが 1 つだけ必要です。

上記の例では、PHP_AUTH_USER と PHP_AUTH_PW の値のみが出力されますが、実際のアプリケーションでは、ユーザー名とパスワードの有効性を確認したり、データベースのチュートリアルをクエリしたり、取得したりする必要がある場合があります。 dbm ファイルから。

一部の Internet Explorer ブラウザには独自の問題があることに注意してください。ヘッダーの順序が少し面倒なようです。現在、HTTP/1.0 401 を送信する前に WWW-Authenticate ヘッダーを送信すると、この問題が解決される可能性があるようです。

PHP 4.3.0 では、従来の外部メカニズムで認証されたページからパスワードを取得するスクリプトを誰かが作成するのを防ぐために、特定のページで外部認証が有効で、セーフ モードがオンになっている場合、PHP_AUTH 変数はただし、いずれにせよ、REMOTE_USER を使用して外部認証されたユーザーを識別できるため、$_SERVER['REMOTE_USER'] 変数を使用できます。

設定手順:

PHP は、AuthType ディレクティブの有無を使用して、外部認証メカニズムが有効かどうかを判断します。 これでも、誰かが認証されていない URL を使用して、同じサーバー上の認証された URL からパスワードを盗むことを防ぐことはできないことに注意してください。

Netscape Navigator と Internet Explorer の両方のブラウザは、401 サーバー応答を受信すると、すべてのローカル ブラウザのドメイン全体の Windows 認証キャッシュをクリアします。これにより、ユーザーが事実上ログアウトされ、ユーザー名とパスワードの再入力が強制される可能性があります。このメソッドは、ログイン ステータスを「期限切れ」にするか、「ログアウト」ボタンの応答動作として使用します。

例 34-3. ユーザー名とパスワードの再入力を強制する HTTP 認証の例


コードをコピーします

コードは次のとおりです: 関数認証 () {
header ( 'WWW-Authenticate: Basic realm="テスト認証システム"' ); ヘッダー ( 'HTTP/1.0 401 Unauthorized' ); echo "このリソースにアクセスするには、有効なログイン ID とパスワードを入力する必要があります" ; 出る
}
if (!isset( $_SERVER [ 'PHP_AUTH_USER' ]) ||
( $_POST [ 'SeenBefore' ] == 1 && $_POST [ 'OldAuth' ] == $_SERVER [ 'PHP_AUTH_USER' ])) {
認証(); }
他 {
echo "

ようこそ: { $_SERVER [ 'PHP_AUTH_USER' ]}
; echo "古い: { $_REQUEST [ 'OldAuth' ]} " ; echo "

n " ; echo "n" ; echo " n " ; echo "n" ; echo "

n" ; }
?>

この動作は HTTP の基本認証標準には必要ないため、Lynx ブラウザのテストでは、認証が有効である限り、Lynx は 401 サーバーの戻り情報を受信して​​も認証ファイルをクリアしないことが示されています。ファイル検査の要件は変更されていません。ユーザーが「戻る」ボタンをクリックしてから「進む」ボタンをクリックする限り、元のリソースにアクセスできます。ただし、「_」を押すと認証情報をクリアできます。キー

次の例では、2 つの変数 $PHP_AUTH_USER と $PHP_AUTH_PW を使用して、参加者が合法であるかどうかを確認し、参加を許可します。この例では、ログインを許可されるユーザー名とパスワードのペアは、それぞれ tnc と Nature:
です。


コードをコピーします

コードは次のとおりです:

if(!isset($PHP_AUTH_USER))
{
Header("WWW-Authenticate: Basic realm="My Realm""); ヘッダー("HTTP/1.0 401 不正"); echo "ユーザーがキャンセルボタンを押した場合に送信するテキスト
"; 出る

}

それ以外は
{

if ( !($PHP_AUTH_USER=="tnc" && $PHP_AUTH_PW=="nature") ) { // ユーザー名とパスワードの組み合わせが間違っている場合は、再検証を強制します Header("WWW-Authenticate: Basic realm="My Realm""); ヘッダー("HTTP/1.0 401 不正"); echo "エラー: $PHP_AUTH_USER/$PHP_AUTH_PW が無効です。"; 出る }
それ以外は
{
エコー「ようこそ tnc!」; }
?>

実際、実際のリファレンスでは、上記のコード スニペットで明らかなユーザー名とパスワードのペアを使用することはほとんどなく、データベースまたは暗号化されたパスワード ファイルを使用してそれらにアクセスします。

指定された検証情報に基づいてユーザー ID を検証します:

まず、次のコードを使用して、ユーザーがユーザー名とパスワードを入力したかどうかを判断し、ユーザーが入力した情報を表示します。

コードをコピーします コードは次のとおりです:
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo '認証が必要です。'; 出る
}
他 {
echo "

次のユーザー名を入力しました: $PHP_AUTH_USER

次のパスワードを入力しました: $PHP_AUTH_PW
認証タイプは次のとおりです: $PHP_AUTH_TYPE

";
}
?>


説明:

isset() 関数は、変数に値が割り当てられているかどうかを判断するために使用され、変数値が存在するかどうかに応じて true または false を返します。 header() 関数は、特定の HTTP ヘッダーを送信するために使用されます。 header() 関数を使用する場合は、実際の出力を生成する HTML または PHP コードの前に必ずこの関数を呼び出してください。 上記のコードは非常に単純で、ユーザーが入力したユーザー名とパスワードを実際の値に基づいて効果的に検証するわけではありませんが、少なくとも PHP を使用してクライアント側で入力ダイアログ ボックスを生成する方法は理解できます。 次に、指定された検証情報に基づいてユーザーの身元を確認する方法を学びましょう。コードは次のとおりです。

コードをコピーします

コードは次のとおりです:

if (!isset($PHP_AUTH_USER)) {

header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo '認証が必要です。'; 出る } else if (isset($PHP_AUTH_USER)) { if (($PHP_AUTH_USER != "管理者") || ($PHP_AUTH_PW != "123")) { header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo '認証が必要です。'; 出る
} その他 {
echo "

あなたは許可されています!

"; }
}
?>

ここでは、まずユーザーがユーザー名とパスワードを入力したかどうかを確認し、入力されていない場合は、ユーザーに ID 情報の入力を求めるダイアログ ボックスが表示され、ユーザーが入力した情報が一致するかどうかを判断して許可を与えます。指定されたユーザー アカウント admin/123。ユーザーのアクセス権を指定するか、ユーザーに正しい情報を再度入力するように求めます。この方法は、すべてのユーザーが同じログイン アカウントを使用する Web サイトに適しています。

もう一つの簡単なパスワード認証


Windows 98 で PHP スクリプトを作成して実行する場合、または Linux でデフォルト設定に従って PHP を CGI プログラムとしてインストールする場合、このため、上記の PHP プログラムを使用して検証機能を実装することはできません。 , Wubian は別の簡単なパスワード検証方法を提供しますが、あまり実用的ではありませんが、学習には適しています。


コードをコピーします

コードは次のとおりです:

if($_POST[Submit]=="Submit"){ //ユーザーがデータを送信する場合、操作を実行します
$password=$_POST[password]; //ユーザーが入力したデータを取得し、変数パスワードに保存します
$cpassword=$_POST[cpassword]; // ユーザーが入力した確認データを取得し、変数 $cpassword に保存します
if(emptyempty($password) || emptyempty($cpassword))
{
die("パスワードを空にすることはできません!"); }
elseif ( ((strlen($password) < 5) || (strlen($password) > 15)))
{
Die("パスワードの長さは 5 ~ 15 です"); }
//--- 値の比較
elseif ( !(strlen($password) == strlen($cpassword)) )
{
Die("2 回入力されたパスワードが一致しません! "); }
elseif( !($password === $cpassword)) //値とデータ型を比較します
{
die("2 つのパスワードが一致しません! "); }
else //パスワードを出力するループ、パスワードなので*記号が出力されます
{
for ($i=0;$i {
「*」をエコーし​​ます。 }
}
}
?>

フォーム検証 - パスワードフィールド検証
<フォーム名="form1" メソッド="ポスト" アクション=""> パスワードを入力してください:
パスワードの確認:



この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。




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

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/938851.html
技術記事

PHP フォームベースのパスワード認証と HTTP 認証の使用例、フォーム例 この記事では、PHP フォームベースのパスワード認証と HTTP 認証の使用例について説明します。参考のためにみんなで共有してください。詳細な分析...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。