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初心者なのでなんかいろいろ間違ってるかも。。。
ご指摘あればよろしくお願いします。