パスワードの強度を判定できる「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でバリデート処理する必要がありそうだけど、特にルールは無く簡易的で良いので強度測定を入れたいようなケースだと本ライブラリで対応できそう。
関連記事
-
-
ブラウザ開発者ツールの起動を検出しソースコード変更やリダイレクト設定できる「console-ban」ライブラリの利用方法
他サイトのソースコードを拝見するため開発者ツールを開こうとすると、偶に「デバッガ ...
-
-
JavaScriptでtableタグをエクセルファイル(xlsx)としてダウンロードさせる方法
table内のデータを何らかのファイルでダウンロードさせたい。通常PHPでCSV ...
-
-
バニラJavaScriptでリッチなセレクトメニュー(プルダウン)を実装できる「Tom Select」の利用方法
先日バニラJavaScriptでリッチなセレクトメニュー(プルダウン)を実装でき ...
-
-
JavaScriptでlocalStorageを簡単に操作できる「store.js」ライブラリの利用方法
以前Dexie.jsを利用してIndexedDBを取り扱う方法をメモしたが、今回 ...
-
-
JavaScript / PHPにて「lz-string」を用いてデータの圧縮・展開する方法
文字数が多いGETパラメータを送信したいというケースがあった。また、送信側はJa ...