ホームページ >バックエンド開発 >PHPチュートリアル >PHP 統合動的パスワード認証_php の例

PHP 統合動的パスワード認証_php の例

WBOY
WBOYオリジナル
2016-08-04 08:56:461216ブラウズ

現在、ほとんどのシステムは ID 認証ログインに静的パスワードを使用していますが、静的パスワードは盗まれやすいため、そのセキュリティはセキュリティ要件を満たすことができません。

動的パスワードはワンタイムパスワードを使用し、パスワードの盗難によるセキュリティ上の問題を防ぐために使用済みのパスワードを無効にします。
動的パスワードは、HOTP (イベント カウントに基づく動的パスワード、RFC4226)、TOTP (時間カウントに基づく動的パスワード、RFC6238)、OCRA (チャレンジ/レスポンス動的パスワード、RFC6287) およびその他の方式に分類されます。

この記事では、TOTP 方式を統合した動的パスワード認証のソリューションを紹介します。PHP フレームワークは Thinkphp3.2.3 を使用し、動的パスワード ジェネレーターは Google 認証を使用します。

1. Thinkphp フレームワークに oath アルゴリズム クラスを追加します

oath アルゴリズムのカプセル化クラス oath.php コードは次のとおりです:

リーリー

Googleの動的パスワードアルゴリズムのシードキーはbase32エンコーディングを使用するため、base32.phpの内容は次のとおりです。

リーリー
これら 2 つのファイルを ThinkPHP フレームワークの ThinkPHPLibraryVendoroath ディレクトリに配置します。oath ディレクトリは自分で作成したものです。

2. データベースフィールドを追加します

次のフィールドをユーザーテーブルに追加します:

auth_type (0-静的パスワード、1-動的パスワード)
シード (シードキー)
temp_seed (一時シードキー)
last_logintime (最後に成功したログイン時間)
last_otp (最後に使用したパスワード)
このうち、auth_type はユーザーが使用する認証方法を示し、seed はユーザーのシード キー、temp_seed はユーザーが動的パスワード認証をアクティブ化する前に一時的に保存されたシード キーです。シードフィールドに記入します。 last_logintime と last_otp は、最後に成功した認証の時刻と動的パスワードであり、ユーザーが同じパスワードを再利用するのを防ぐために使用されます。

3. コードの統合

1)、動的パスワードを有効化します

元のシステムのパスワード変更ページに認証方法の選択を追加します。例:

PHP 統合動的パスワード認証_php の例

ユーザーが動的パスワード方式を選択した場合、QR コードが生成され、ユーザーが動的パスワードをアクティブ化するためのページに表示されます。 Google認証に対応するため、QRコードの形式はGoogleと同じです。 QRコードの生成方法については、別記事「Thinkphp3.2.3でphpqrcodeを統合し、ロゴ付きQRコードを生成」を参照してください。

キーの QR コードを生成するコードは次のとおりです:

リーリー
random はランダムな文字列を生成する関数です。コード $rand=str_replace('=','',$rand) は、Google モバイル トークンの Base32 デコード アルゴリズムが '=' 記号を埋めていないためです。


ユーザーの動的パスワードを確認するコードは次のとおりです:

リーリー

2)、動的パスワードログイン

ユーザーの動的パスワードログイン検証のコード:

データベースから auth_type、seed、last_otp フィールドを読み取ります。


リーリー

4. テストと検証

Google認証をダウンロードし、静的パスワードを使用してシステムにログインし、パスワード変更ページに入ります。

Google 認証を開き、QR コードをスキャンすると、動的パスワードが表示されます。

PHP 統合動的パスワード認証_php の例

PHP 統合動的パスワード認証_php の例

コンテンツを保存し、動的パスワードを正常にアクティブ化します。

その後、強力な動的パスワードを使用してシステムにログインできるようになります!

以上がこの記事の全内容です。皆様の学習に役立つことを願っております。また、皆様も Script Home をサポートしていただければ幸いです。

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