公開日:2015年3月12日
最終更新日:2015年3月13日
最終更新日:2015年3月13日
JavaScript パスワード強度判定ライブラリ「Password Checker」
Password Checker とは
「Password Checker」とは、オープンソースのパスワード強度判定 JavaScript ライブラリです。商用利用可能、クレジット表記不要、改変、再配布可能です。
詳しくは以下のページを参照してください。
Password Checker の機能
「Password Checker」は、パスワードを受け取るとパスワードの強度判定を行い、以下の5種類の判定結果を返します。
- 弱い
- やや弱い
- 普通
- やや強い
- 強い
「Password Checker」は、Microsoft の「パスワード チェッカー: 安全性の高いパスワードの使用 | Microsoft セキュリティ」を参考にして仕様を策定しましたが、以下の機能が追加になっています。
- 辞書機能
- 辞書に載っている文字を含むパスワードは、どんなに文字を増やしても「弱い」と判定
- 辞書はカスタマイズ可能
- 数値パスワード判定機能
- 数字だけのパスワードは、何文字にしても「弱い」と判定
実行サンプル
「Password Checker」のサンプルは以下より試すことができます。ブラウザ上で処理は完結するのでサーバーとパスワードの通信は行いませんが、本物のパスワードは試さないでください。
パスワード | |
パスワード強度 |
ダウンロード
ダウンロード 0.91 KB
使用サンプル
「Password Checker」の使用サンプルは、以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <script type="text/javascript" src="passwordchecker.js"></script> <script type="text/javascript"> function setPasswordLevel(password) { var level = getPasswordLevel(password); var text = ""; if (level == 1) { text = "弱い";} if (level == 2) { text = "やや弱い";} if (level == 3) { text = "普通";} if (level == 4) { text = "やや強い";} if (level == 5) { text = "強い";} document.getElementById("level").value = text; } </script> </head> <body> <input type="text" id="password" onkeyup="setPasswordLevel(this.value);"> <input type="text" id="level"> </body> |
ソースコード
「Password Checker」のソースコードは、以下のようになります。
自由にカスタマイズしてご利用ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
/* ライブラリ名: Password Checker バージョン: 1.0.1 ライセンス: http://www.websec-room.com/license パスワード強度判定 1:弱い 2:やや弱い 3:普通 4:やや強い 5:強い */ function getPasswordLevel(password) { var level = 0; var pattern = 0; var hasLower = false; var hasUpper = false; var hasCharacter = false; var hasNumber = false; for (i = 0; i < password.length; i++) { var ascii = password.charCodeAt(i); //アルファベット小文字チェック if ((ascii >= 97) && (ascii <= 122)) { hasLower = true; } //アルファベット大文字チェック if ((ascii >= 65) && (ascii <= 90)) { hasUpper = true; } //数値チェック if ((ascii >= 48) && (ascii <= 57)) { hasNumber = true; } //記号チェック if (((ascii >= 33) && (ascii <= 47)) || ((ascii >= 58) && (ascii <= 64)) || ((ascii >= 91) && (ascii <= 96)) || ((ascii >= 123) && (ascii <= 126))) { hasCharacter = true; } } //パターン判別 if (hasLower) {pattern++;} if (hasUpper) {pattern++;} if (hasNumber) {pattern++;} if (hasCharacter) {pattern++;} //パスワードレベル判定 //辞書に登録されている文字チェック var dictionary = ["password","qwerty","abc","admin","root","123"]; for (i = 0; i < dictionary.length; i++) { if (password.indexOf(dictionary[i]) != -1) { level = 1; return level; } } //数値のみパスワードチェック if (password.match(/^[0-9]+$/)) { level = 1; return level; } if (password.length < 8) { level = 1; } if ((password.length >= 8) && (password.length < 14)) { level = 2; } if ((password.length >= 8) && (password.length < 14) && (pattern >= 2)) { level = 3; } if ((password.length >= 8) && (password.length < 14) && (pattern >= 3)) { level = 4; } if ((password.length >= 14) && (pattern < 3)) { level = 3; } if ((password.length >= 14) && (pattern >= 3)) { level = 5; } return level; } |