パスワードの強度を判定できる「zxcvbn」ライブラリの使用方法
アカウントを作成するようなページで偶にパスワードの強度を判定してメーターで表示されるようなケースがある。具体的には半角アルファベットのみだと強度が足りず、数値や記号、大文字を組み合わせると強度が足りるようなもの。これを再現してみたく調べたところ「zxcvbn」というライブラリが良さそう。以下に実装方法をメモ。
サンプル
https://taitan916.info/sample/zxcvbn/
テキストボックスに文字を入力すると直下のバーに変動がある筈。
zxcvbn
GitHub
https://github.com/dropbox/zxcvbn
CDN
CDNで使う場合は以下を記述する。
<script src="https://cdn.jsdelivr.net/npm/zxcvbn@4.4.2/dist/zxcvbn.min.js"></script>
異なるバージョンを利用したい場合は以下から探す。
https://www.jsdelivr.com/package/npm/zxcvbn
実装方法
ソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>パスワードの強度を判定できる「zxcvbn」ライブラリの使用方法サンプル</title> </head> <body> <style> form{ max-width: 500px; #pass{ width: 100%; margin-bottom: 10px; } .bar_container{ position: relative; width: 100%; height: 20px; background-color: #ddd; border-radius: 4px; .bar{ position: absolute; top: 0; left: 0; bottom: 0; background-color: #ddd; border-radius: 4px; } .bar-0{ width: 5%; background-color: #f00; } .bar-1{ width: 25%; background-color: #ff8c00; } .bar-2{ width: 50%; background-color: #ff0; } .bar-3{ width: 75%; background-color: #0f0; } .bar-4{ width: 100%; background-color: #0bF; } } } </style> <form> <input type="text" name="pass" id="pass" placeholder="パスワードを入力してください。"> <div> パスワード強度 </div> <div class="bar_container"> <div class="bar"></div> </div> </form> <script src="https://cdn.jsdelivr.net/npm/zxcvbn@4.4.2/dist/zxcvbn.min.js"></script> <script> document.querySelector(`#pass`).addEventListener(`input`, function() { const result = zxcvbn(this.value); document.querySelector(`.bar`).className = `bar-${result.score} bar`; }); </script> </body> </html>
解説等
resultに結果が入っており「result.score」を元に判定している。スコアは0から4まであり数値が高いとパスワード強度も高くなる。
尚、score以外にも色々返ってきており例えばresult.feedbackをconsole.logで見てみると以下のようなフィードバックが表示される。
Object { warning: "Straight rows of keys are easy to guess", suggestions: (2) […] } suggestions: Array [ "Add another word or two. Uncommon words are better.", "Use a longer keyboard pattern with more turns" ] warning: "Straight rows of keys are easy to guess"
所感
「半角英数字・大文字アルファベット・記号を含む〇文字以上」等、しっかりとルールを決める場合はJavaScriptでバリデート処理する必要がありそうだけど、特にルールは無く簡易的で良いので強度測定を入れたいようなケースだと本ライブラリで対応できそう。
関連記事
-
JavaScriptのHTTPクライアントライブラリ「AXIOS」の使い方
あるサイトのソースコードを拝見しているとAXIOSというJSファイルをCDN呼び ...
-
JavaScriptで簡単にURL操作が行える「domurl」ライブラリの利用方法
JavaScriptでGETパラメータやURLを操作する際にsplitで配列に分 ...
-
JavaScriptのライブラリ「crypto-js」を使用して暗号化・復号化・ハッシュ化する方法
JavaScriptにてCookie等にデータを保存する際に暗号化したものを保存 ...
-
JavaScriptで小数の計算をする際にずれ(誤差)を無くす方法(decimal.js)
JavaScriptで小数の計算をすると値がずれる(誤差が発生する)ことがあった ...
-
JavaScriptでデータをGzip等で圧縮できる「pako」ライブラリの利用方法
以前「zcookies」というライブラリの利用方法をメモしたが、当該ライブラリの ...