Crack関数でパスワードチェック(さくらのレンタルサーバ)

webのサービスで会員登録などをするときに、
よくパスワードの安全度をチェックしてくれたりしますよね。
それをPHPでやってみよう!という試み。
今回はさくらのレンタルサーバでやってみることにします。


PHPマニュアルを見ると、パスワードの強度をチェックするCrack関数というのがあるみたい。
Crack関数を使うためには

  • CrackLib ライブラリ
  • PECLの拡張モジュール

が必要だとか。


それではさっそくCrackLib ライブラリのインストールから。
(インストール先などは適宜読み替えてください)
sourceforgeからソースを落としてきてインストールします。

%mkdir -p ~/local/src
%cd local/src
%wget http://jaist.dl.sourceforge.net/sourceforge/cracklib/cracklib-2.8.10.tar.gz
%tar xvzf cracklib-2.8.10.tar.gz
%cd cracklib-2.8.10
%./configure --prefix=$HOME/local
%make
%make install

この後、make dictで辞書を作る?みたいなんですが、
そのままmake dictするとパーミッションがどうたらと怒られます。
なので、

%chmod 755 ./util/cracklib-format
%make dict

これで/home/usrname/local/share/cracklib以下に

  • pw_dict.hwm
  • pw_dict.pwd
  • pw_dict.pwi

のファイルが出来るハズ。
これでCrackLibライブラリのインストールは完了。


次にPECL拡張モジュールのインストール。
ソースからいれてみました。

%cd ~/local/src
%wget http://pecl.php.net/get/crack-0.4.tgz
%tar xvzf crack-0.4.tgz 
%cd crack-0.4

ここでphpizeすると、

%phpize
Configuring for:
PHP Api Version:         20020918
Zend Module Api No:      20020429
Zend Extension Api No:   20050606
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF 
environment variable is set correctly and then rerun this script. 

autoconfが無いよ!と怒られます。
なので直接autoconfとautoheaderを実行

%/usr/local/bin/autoconf***
%/usr/local/bin/autoheader***

「***」の部分はサーバによって異なるので

%ll /usr/local/bin

とかで調べてください。
autoconf、autoheaderは何もメッセージとか出ないので、
終わったらおもむろに

%./configure
%make

そしてmake installと行きたいところですが、
そのままだとまた怒られるので
MakefileのEXTENSION_DIRの部分を書き換えます。

EXTENSION_DIR = /usr/local/lib/php/extensions/no-debug-non-zts-20020429

php.iniのextension_dirのパスと同じにすればいいかもいれません。
自分はこのようにしてみました。

EXTENSION_DIR = /home/username/local/lib/php/extensions

これでmake installすれば終了。OKなら下のようなメッセージが出ます。

%make install
Installing shared extensions:     /home/username/local/lib/php/extensions

これで準備は完了!
あとはコンパネからphp.iniを設定するか、dl('crack.so')で読み込ませればOK。
PHPマニュアルのサンプルスクリプトを参考にスクリプト書いて試してみてください。

<?php
dl('crack.so');
// CrackLib 辞書をオープンする
$dictionary = crack_opendict('/home/username/local/share/cracklib/pw_dict')
     or die('Unable to open CrackLib dictionary');

// パスワードチェックを行う
$check = crack_check($dictionary, 'strongpasswooooooord');

// メッセージを取得する
$diag = crack_getlastmessage();
echo $diag;

// 辞書を閉じる
crack_closedict($dictionary);
?> 


UNIX初心者なのでなんかいろいろ間違ってるかも。。。
ご指摘あればよろしくお願いします。