PHP フォームベースのパスワード認証と 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 認証の例
上記の例では、PHP_AUTH_USERとPHP_AUTH_PWの値のみが出力されていますが、実際のアプリケーションでは、ユーザー名とパスワードの正当性をチェックする必要がある場合があります。おそらく、データベース チュートリアルのクエリを実行するか、dbm ファイルから取得します。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' ]} を入力しました。" ;
}
?>
例 34-2. ダイジェスト HTTP 認証の例
この例では、単純なダイジェスト HTTP 認証スクリプトを実装する方法を示します。詳細については、RFC 2617 を参照してください。 $realm = '制限エリア' ;
//user => パスワード$users = array( 'admin' => 'mypass' , 'guest' => 'guest' ) ;
if (!isset( $_SERVER [ 'PHP_AUTH_DIGEST' ])) {
die( 'ユーザーがキャンセルボタンを押した場合に送信するテキスト' ); }
ヘッダー ( 'HTTP/1.1 401 Unauthorized' );
ヘッダー ( 'WWW-Authenticate: Digest realm="' . $realm .
' " qop="auth" nonce="' . '" opaque="' . md5 ( $realm ). '"' );preg_match ( '/username="(?P
// PHP_AUTH_DIGEST 変数を分析します.*)",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 ); die( 'ユーザー名が無効です!' );
if (!isset( $users [ $digest [ 'username' ]]))// 有効な応答を生成します
$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 つスペースを入れてください。
一部の 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 () {
if (!isset( $_SERVER [ 'PHP_AUTH_USER' ) ) ||
header ( 'WWW-Authenticate: Basic realm="Test Authentication System"' ) ;
header ( 'HTTP/1.0 401 Unauthorized' );
echo "このリソースにアクセスするには、有効なログイン ID とパスワードを入力する必要があります" ;
}( $_POST [ 'SeenBefore' ] == 1 && $_POST [ 'OldAuth' ] == $_SERVER [ 'PHP_AUTH_USER' ])) {
n" ;
認証 () }
else {
echo "" ;
echo "古い: { $_REQUEST [ 'OldAuth' ]} " ;
echo "
}
次の例では、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(empty($password) || empty($ cpassword))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{
die("パスワードを空にすることはできません!");}
elseif ( ((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;$ihtml>
フォーム検証 - パスワード フィールド検証
">
パスワードを入力してください:< ;input type="text" name="password" >
パスワードの確認:

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

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