Pear::Auth 認証

Pear::Auth 認証スクリプトファイル作成

認証フォ-ム LoginForm0.php が準備できましたので、次ぎに Pear::Auth を利用した認証スクリプトを作成します。
Pear::Auth ライブラリ-ではユ-ザ-情報を管理するためにファイルからデ-タべ-ス、ディレクトリサ-ビスなど、 様々なストレ-ジドライバを公開しています。
しかし、ユ-ザ-数の少ない小規模な Web サイトで、とにかく簡単にフォ-ム認証を実現したいならば、Auth_Container_Array クラス(Arrayドライバ)を利用するのが便利です。
このクラスは、XAMPP であれば、C:\xampp\php\pear\Auth\Container.php の中に書かれています。
Arrayドライバを利用することで、ユ-ザ名/パスワ-ドのセットを連想配列(ハッシュ)の形式でスクリプト中で一元管理できますので、 ユ-ザ管理のためのデ-タストア(ストレ-ジ)を意識することなく容易に認証機能を実装できます。
作成ファイル Auth-com-30.php の内容は、
63Pear Village に戻り
左サイドナビ「Pear::Auth 認証」の中の
Pear::Auth 認証スクリプト PHP ファイル
から見てください。

Pear::Auth ファイル読込

まずは、フォ-ム認証を制御するのが、Auth クラスですのでこれを読み込みます。
require_once 'Auth/Auth.php';

loginFunc 作成

function loginFunc($usr, $status) を作成します。
これはフォ-ム生成関数です。
PEAR::Auth から引数として現在のユ-ザ名$usr(この情報はここでは使用せず)と 認証ステ-タス$status(下記参照)を受取ります。

$status値 失敗英文名及びその内容
1. AUTH_IDLED
  セッションのアイドル時間が所定の時間を超えている
2. AUTH_EXPIRED
  認証が有効期限切れになっている
3. AUTH_WROND_LOGIN
  ユーザー名またはパスワードが異なっている。
4. AUTH_METHOD_NOT_
  SUPPORTED
  コ-ルバック関数が実装されていない
5. AUTH_SECURITY_BREACH
  セキュリティに問題があった
6. AUTH_CALLBACK_ABORT
  コ-ルバック関数がセッションを終了させた

ここですることは、ログインが失敗した場合にログインフォ-ムで表示するエラー内容を設定すること とログインファイル(LoginForm0.php)を読み込むことです。

  $err = array(
   AUTH_IDLED =>
   '最大アイドル時間を超過しています。
    <br>
    再ログインしてください。',
   AUTH_EXPIRED => 
   'ログイン期限が切れています。
    <br>
    再ログインしてください。',
   AUTH_WRONG_LOGIN => 
   'ユーザID/
    パスワードが間違っています。
   ');
   require_once('LoginForm0.php');

$err は6個の配列が設定できるのですが、ここでは3個だけ設定します。
残り3個にはエラ-内容を設定しないので、たとえエラ-が発生したとしても何も表示されませんが、 所詮発生するはずもないエラ-(上記 4~6)なので設定は必要ありません。

Array ドライバでパラメ-タ定義

連想配列 $params に認証に必要な各種デ-タを設定します。
キ-名ごとに説明していきます。

  1. cryptType

    パスワ-ドの暗号化方法。
    3方式が使用可能。
    none 平文
    md5  デフォルト値
    crypt 今回はこれを使用

  2. users

    二次元連想配列にして設定します。
    ID をインデックス名にして、パスワ-ドをその配列値にします。
    例えば、
    ID = '63pear'
    PASSWORD = '1234567'
    なら

      $params = array(
       'users' => array(
       '63pear' => '1234567',
       ));

    なのですが・・・・
    cryptType に none を指定すれば、これで OK です。
    でも今回は、crypt を指定しますので、PASSWORD を crypt 暗号化をする必要があります。
    暗号化しないと、ファイルが漏洩すると PASSWORD が盗まれてしまいます。

PASSWORD を暗号化

crypt ハッシュ値は PHP 標準の crypt 関数を利用することで生成できます。

Web 一筆箋

Pear::Auth では、Unix 標準の DES ベースのアルゴリズムのなかで使用しているようです。
この場合、crypt 関数の書式は
crypt (暗号化したい文字列, 種)
 暗号化する文字列は半角英数字8文字以内
 種 (salt) は、英数字、ドット、スラッシュのいずれかの半角2文字
となり、得られる返り値のハッシュ文字列は、頭の2桁が salt の文字列と同じになります。
salt はパスワードを暗号化する際に付与される文字列ですが、不可逆式のパスワードを作成する場合に使用されます。
不可逆式のパスワードは、一度暗号化すると元の平文のパスワードに戻せない文字列になります。
しかしながら、考えられるパスワードを暗号化した文字列を予め数多く用意しておき、 攻撃する暗号文字と比較してパスワードを破る方法があります。
これをレインボー攻撃と呼びます。
このような攻撃に対して、パスワードに salt を付加して暗号化することで、推測されにくい文字列にして、 防御措置を取ることができます。
以下に、crypt 暗号化ファイルを示します。
例えば、PASSWORD = '1234567'、salt = 'xy' とすれば

  <?php
    $pass = '1234567';
    echo crypt($pass,'xy');
  ?>

なるファイルを作成し、XAMPP の中で実行すれば、
xyxqaLuHY7Ipc
なる、ハッシュ値を得ることができます。
でもちょっと待ってください。
パスワ-ドの暗号化を行っても、クライアントとサ-バ-間の通信が保護されるわけではありません。
ただ、サ-バ-側でのみ保護されているだけです。
通信経路では平文のパスワ-ドがやりとりされています。
これを防ぐには SSL などの通信プロトコルを使用することが必要です。
ここまでをまとめると、連想配列 $params の設定は

  $params = array(
  'cryptType' => 'crypt',
  'users' => array(
   '63pear' => 'xyxqaLuHY7Ipc',
   ));

となります。

Auth クラスのインスタンス化

$myAuth = new Auth
("Array", $params, "loginFunc");
今回、配列に ID、PASSWORD を保存して認証をする方式をとりますので、
第1引数には、配列を意味する、"Array"
第2引数には、ID、PASSWORD を保存してある配列名
第3引数には、ログインフォ-ムを設定している function 名
を設定します。

有効期限の設定

エンドユ-ザは気まぐれです。
ログアウトせずに別なペ-ジに移動したり、プラウザを放置したりします。
こんなとき第三者が認証ペ-ジを利用できる可能性を減らすために、まずは有効期限を設定します。
setExpire メソッドを使用します。
$myAuth->setExpire(30);
ここでは、ログインしてから認証が期限切れとなるまでの時間(単位:秒)を 30秒に設定します。
デフォルト値は無限大のはずですが、実際は24分のようです。
Pear::Auth は PHP 標準のセッション機能を利用して認証情報を管理しています。
従って、認証の有効期限をセッションのタイムアウト時間よりも長く設定することはできません。
セッションのタイムアウト時間は、XAMPP では、
C:\xampp\php
にある php.ini ファイルの 1509行目あたりに
session.gc_maxlifetime = 1440   (24分)
として設定されているので、これにより有効期限時間の最大値は 24分になってしまうようです。

最大アイドル時間の設定

setIdle( ) メソッドで、最大アイドル時間を設定できます。
"アイドル時間"とは、 ユーザが2つの操作をする間隔の最大時間(単位:秒) のことです。
操作無しに最大アイドル時間が経過すると、ユーザは自動的にログアウトされ ます。
逆に、ユーザが最大アイドル時間までに何か操作をすると、アイドル時間は リセットされます。
ここでは、5秒に設定します。
$myAuth->setIdle(5);

認証済みか判断

startメソッドで現在のユ-ザが認証済みであるかどうかの判断を開始します。
$myAuth->start();
処理は中断せず、次ぎに checkAuth メソッドが現在のユ-ザが認証済みであるかどうかの判断をします。
$myAuth->checkAuth()
フラグのたち方は
ユ-ザ認証済 → TRUE
ユ-ザ未承認 → FALSE
となります。これを否定すると
!$myAuth->checkAuth()
ユ-ザ認証済 → FALSE
ユ-ザ未承認 → TRUE
となります。よって
if(!$myAuth->checkAuth()){
  exit();
}
と記述すると、未承認の時は exit してログインフォ-ムを表示、
認証済みの時はそのまま後続の処理すなわちコンテンツペ-ジを表示します。
これで、Pear::Auth 認証スクリプトファイル作成は完了です。
引き続き、Pear::Auth 認証組込ドキュメントファイルを作成します。


Pear::Auth 認証組込ドキュメントファイル作成 に続く
Pear::Auth 認証基本ファイル概要 に戻る

63Pear Villageに戻る