2011年11月24日木曜日

ユーザー登録システムにおけるパスワードの強度チェック

ウェブサイト等でユーザー登録が必要なシステムを作成する場合に、注意する点がいくつかあるが、そうした中のひとつとして、ユーザーが設定するパスワードにも気をつけておきたい。
ユーザーが安全性の低いパスワードを設定した場合には、「あらし」や「なりすまし」が発生する危険性がある。
そのような場合には、ウェブサイトのセキュリティ管理にまで追求が及ぶこともあり、ユーザー、ウェブサイトともに被害を被る。
新規ユーザー登録時や、パスワード変更時に、パスワードの強度をチェックするようにしておき、強度が低すぎるパスワードは受け付けないようにしておく方が安全だ。

チェックする項目としては以下のようなことが考えられる。
・数字のみのパスワードは受け付けない。
 12345678
 111222333

・キーボード配列に沿ったパスワードは受け付けない。
 1qaz2wsx ・・・ 1キーと2キーから下に押していったパターン
 qazwsx ・・・ qキーとwキーから下に押していったパターン
 qwertyuiop ・・・ qキーから右に押していったパターン
 741852963 ・・・ テンキーを下方向に押していったパターン

・特定の文字列を含むパスワードは受け付けない。
 password
 pass
 hoge
 hogehoge
 hogefuga
 サイト名等

・繰り返しパターンのパスワードは受け付けない。
 abcdabcd
 abcabcabc
 abcddcba

・ユーザーIDを含むパスワードは受け付けない。
・含まれる文字の種類数が少ないパスワードは受け付けない。

キーボード配列等の文字列パターンは以下のPHPプログラムのように、正順、逆順どちらでも受け付けないようにしておくと良い。
----------
$pattern = "1234567890".
    "abcdefghijklmnopqrstuvwxyz".
    "qwertyuiopasdfghjklzxcvbnm".
    "qazwsxedcrfvtgbyhnujmikolp".
    "1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9ol0p".
    "zaqxswcdevfrbgtnhymjukilop".
    "zaq1xsw2cde3vfr4bgt5nhy6mju7ki8lo9p0".
    "741852963963852741";
if(stristr($pattern, $password) != false)
    return false;
if(stristr(strrev($pattern), $password) != false)
    return false;
return true;
----------

0 件のコメント: