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

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

Jul 20, 2016 am 11:09 AM
apache http php そして による に基づく パスワード 方法 機構 モジュール 使用法 形状 認証 確認する

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 などを含むオートグローバル グローバル変数は 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"' );
header ( 'HTTP/1.0 401 Unauthorized' );
echo 'ユーザーがキャンセルボタンを押した場合に送信するテキスト'
} else; {
echo "

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

" ;
echo "

パスワードとして { $_SERVER [ 'PHP_AUTH_PW' ]} を入力しました。< / p>" ;
}
?>

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

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

$realm = '制限エリア' ;

//user => パスワード

$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="' . '" 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' ], $digest );


if (!isset( $users [ $digest [ 'username' ]]))

die( 'ユーザー名が無効です!' );


// 有効な応答を生成します

$A1 = md5 ( $digest [ 'username' ] . ':' . $realm . ':' . $users [ $digest [ 'username' ]]); $_SERVER [ 'REQUEST_METHOD' ]. ':' . $digest [ 'uri' ]);
$valid_response = md5 ( $A1 . ':' . $digest [ 'nonce' ]. ':' . $digest [ ' nc' ]. $digest [ 'cnonce' ]. $digest [ ':' . $A2 );

if ( $digest [ 'response' ] valid_response )
die( '認証情報が間違っています!' );

// OK、有効なユーザー名とパスワード
echo '次のようにログインしています: ' $digest [ 'username' ];

?>

互換性の問題: HTTP ヘッダー コードを記述するときは注意してください。すべてのクライアントとの互換性を確保するには、キーワード「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 認証の例

functionauthenticate () {
header ( 'WWW-Authenticate: Basic realm="Test Authentication System"' ) ;
header ( 'HTTP/1.0 401 Unauthorized' );
echo "このリソースにアクセスするには、有効なログイン ID とパスワードを入力する必要があります" ;
}

if (!isset( $_SERVER [ 'PHP_AUTH_USER' ) ) ||

( $_POST [ 'SeenBefore' ] == 1 && $_POST [ 'OldAuth' ] == $_SERVER [ 'PHP_AUTH_USER' ])) {
認証 () }
else {
echo "< p> ;ようこそ: { $_SERVER [ 'PHP_AUTH_USER' ]}
" ;
echo "古い: { $_REQUEST [ 'OldAuth' ]} " ;
echo "

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

n" ;
}


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



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

if(!isset($PHP_AUTH_USER))

{

Header("WWW-Authenticate: Basic) realm ="My Realm"");

Header("HTTP/1.0 401 Unauthorized");

echo "ユーザーがキャンセルボタンを押した場合に送信するテキスト";

exit;

}

else

{

if ( !($PHP_AUTH_USER=="tnc" && $PHP_AUTH_PW=="nature") )

{

// ユーザー名とパスワードのペアが間違っている場合は、再認証を強制します

Header("WWW-認証: Basic realm="My Realm");

Header("HTTP/1.0 401 Unauthorized");

echo "エラー : $PHP_AUTH_USER/$PHP_AUTH_PW が無効です。";

exit;

}

else

{

echo "Welcome tnc!";

?>

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

6.3 指定された検証情報に基づいてユーザーの身元を確認する

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

if (!isset($PHP_AUTH_USER)) {

header('WWW-Authenticate: Basic realm="My Private Stuff"');

header('HTTP/1.0 401 Unauthorized') );

echo '認証が必要です。'; 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 権限がありません');

exit

else if (isset($PHP_AUTH_USER)) {

if (($PHP_AUTH_USER != "admin") | | ($ PHP_AUTH_PW != "123")) {

header('WWW-Authenticate: Basic realm="My Private Stuff"')

header('HTTP/1.0 401 Unauthorized');必須。' ;

終了

} else {

echo "

}

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

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

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

if($_POST[Submit]=="Submit"){ //ユーザーがデータを送信する場合、操作を実行します

$password=$_POST[password] //ユーザーが入力したデータを取得します。 user, そして変数に保存しますpassword

$cpassword=$_POST[cpassword]; //ユーザーが入力した確認データを取得し、変数に保存します $cpassord
if(empty($password) || empty($ cpassword))

{

die("パスワードを空にすることはできません!");

}

elseif ( ((strlen($password) < 5) || (strlen($password) > 15)))

{

die("パスワードの長さは 5 と 15");
}
//--- 値の比較
elseif (!(strlen($password) == strlen($cpassword)))
{
die("パスワードを 2 回入力しましたdo not match! " );
}
elseif( !($password === $cpassword)) //値とデータ型を比較します
{
die("2 つのパスワードが一致しません! ");
}
else / /ループパスワード出力、パスワードなので*記号
{
for ($i=0;$i html>


フォーム検証 - パスワード フィールド検証


< form name="form1" method="post" action="">
パスワードを入力してください:< ;input type="text" name="password" >

パスワードの確認:












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

www.bkjia.com

tru​​e

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

技術記事

PHP の HTTP 認証メカニズムは、PHP が Apache モジュールとして実行されている場合にのみ機能するため、この機能は CGI バージョンには適用されません。 Apache モジュールの PHP スクリプトでは、header() 関数を使用できます...


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

H5プロジェクトの実行方法 H5プロジェクトの実行方法 Apr 06, 2025 pm 12:21 PM

H5プロジェクトを実行するには、次の手順が必要です。Webサーバー、node.js、開発ツールなどの必要なツールのインストール。開発環境の構築、プロジェクトフォルダーの作成、プロジェクトの初期化、コードの書き込み。開発サーバーを起動し、コマンドラインを使用してコマンドを実行します。ブラウザでプロジェクトをプレビューし、開発サーバーURLを入力します。プロジェクトの公開、コードの最適化、プロジェクトの展開、Webサーバーの構成のセットアップ。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 PHP関数引数と配列の開梱で...(SPLAT)演算子の目的と使用について説明してください。 Apr 06, 2025 am 12:07 AM

PHPの...(SPLAT)演算子は、機能パラメーターと配列を開梱するために使用され、コードのシンプルさと効率を向上させます。 1)関数パラメーター解放:アレイ要素をパラメーターとして関数に渡します。 2)配列の開梱:アレイを別の配列または関数パラメーターに解除します。

XMLでPDFをエクスポートする方法 XMLでPDFをエクスポートする方法 Apr 03, 2025 am 06:45 AM

XMLをPDFにエクスポートするには、XSLTを使用し、XMLデータバインディングライブラリを使用する方法は2つあります。 XSLT:XSLT StyleSheetを作成し、XSLTプロセッサを使用してXMLデータを変換するPDF形式を指定します。 XMLデータバインディングライブラリ:XMLデータバインディングライブラリのインポートPDFドキュメントオブジェクトの作成XMLデータエクスポートPDFファイル。 PDFファイルに適している方法は、要件に依存します。 XSLTは柔軟性を提供しますが、データバインディングライブラリは簡単に実装できます。単純な変換のために、データバインディングライブラリの方が優れており、複雑な変換の場合、XSLTがより適しています。

どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) どのようにしてクラスが拡張されたり、PHPでメソッドがオーバーライドされたりするのを防ぐことができますか? (最終キーワード) Apr 08, 2025 am 12:03 AM

PHPでは、最終的なキーワードを使用して、クラスが継承されないようにし、メソッドが上書きされます。 1)クラスを決勝としてマークする場合、クラスを継承することはできません。 2)メソッドを最終的にマークする場合、メソッドはサブクラスによって書き換えられません。最終的なキーワードを使用すると、コードの安定性とセキュリティが保証されます。

PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 PHPで厳密なタイプ(declare(strict_types = 1);)を説明します。 Apr 07, 2025 am 12:05 AM

PHPの厳格なタイプは、declare(strict_types = 1)を追加することで有効になります。ファイルの上部に。 1)関数パラメーターのタイプチェックと戻り値を強制して、暗黙の型変換を防ぎます。 2)厳格なタイプを使用すると、コードの信頼性と予測可能性を改善し、バグを減らし、保守性と読みやすさを向上させることができます。

See all articles