パスワードの強度を判定できる「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にて電子書籍や漫画ビューア用のライブラリ「ToraViewer」の利用方法
電子書籍や漫画ビューア用を設置したい。条件としてはレスポンシブ対応していること。 ...
-
JavaScriptにて領収書等のテンプレートHTMLページをPDFファイル化させる方法(html2pdf)
JavaScriptにてhtml2pdfというライブラリを使用することでHTML ...
-
JavaScriptのHTTPクライアントライブラリ「AXIOS」の使い方
あるサイトのソースコードを拝見しているとAXIOSというJSファイルをCDN呼び ...
-
jQueryプラグインでクリップボードにコピーする方法(clipboard.js)
ページ上のボタンをクリックすることで特定の文章をクリップボードにコピーしたかった ...
-
JavaScriptでtableタグをエクセルファイル(xlsx)としてダウンロードさせる方法
table内のデータを何らかのファイルでダウンロードさせたい。通常PHPでCSV ...