PHP の Crack を使おうとして右往左往したのでメモです.
Crackの導入
環境
CentOS release 6.5 (Final)
PHP 5.6.12
cracklib のインストール
$ sudo yum install cracklib cracklib-devel cracklib-dict
crack のダウンロード,インストール
$ svn export http://svn.php.net/repository/pecl/crack/trunk crack
$ cd crack
$ phpize
$ ./configure
$ make
$ sudo make install
私の場合は,$ make
の後に $ make test
をしてくれと言われました.
ここまで終わったら crack.so が作成されるので,php.ini に設定を追加します.
php.ini
; crack
extension=crack.so
辞書の作成
$ sudo create-cracklib-dict /usr/share/dict/linux.words
$ ls /usr/share/cracklib/
cracklib-small.hwm cracklib-small.pwi pw_dict.hwm pw_dict.pwi
cracklib-small.pwd cracklib.magic pw_dict.pwd
テスト
サーバ再起動
これをしなくてもコマンドだと実行可能です.しかし,ブラウザで表示させたり,実際に場合には忘れずに再起動をしましょう.(これで滅茶苦茶時間を食いました)
$ sudo service httpd restart
テストコード
test.php
<?php
// CrackLib 辞書をオープンする
$dictionary = crack_opendict('/usr/share/cracklib/pw_dict');
// パスワードチェックを行う
// 'hogehoge'がみたいパスワード
$check = crack_check($dictionary, 'hogehoge');
// メッセージを取得する
$diag = crack_getlastmessage();
switch ($diag) {
case "it's WAY too short":
$diag = "あまりにもパスワードが短すぎます";
break;
case "it is too short":
$diag = "パスワードが短すぎます";
break;
case "it does not contain enough DIFFERENT characters":
$diag = "同じ文字や数字が含まれすぎています";
break;
case "it is all whitespace":
$diag = "空白だけのものは使えません";
break;
case "it is too simplistic/systematic":
$diag = "単純もしくは規則正しすぎます";
break;
case "it is looks like to a National insurance number":
$diag = "国民保険の番号のような番号は使えません";
break;
case "it is based on a dictionary word":
$diag = "辞書に含まれる単語だけではいけません";
break;
case "it is based on a (reversed) dictionary word":
$diag = "辞書に含まれる単語を逆順にしただけではいけません";
break;
case "strong password":
$diag = "強いパスワードです";
break;
default:
$diag = "";
break;
}
// 辞書を閉じる
crack_closedict($dictionary);
echo $diag;
?>
$ php test.php
同じ文字や数字が含まれすぎています
参考
Crack関数のインストール
PHP: Crack - Manual
phpize で共有 PECL 拡張モジュールをコンパイルする方法