In HTML, <input type="password"> is a form input element designed to mask typed characters (often displayed as ●) to protect sensitive information like passwords.
<input type="password"> は、ユーザーが入力したテキストを隠しながらフォームへ送信できる、HTML 標準の入力フォーム要素です。多くの場合、ログインフォームやサインアップフォームなど、機密情報を入力する場面で使用されます。
HTML
<form action="/login" method="POST">
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<button type="submit">Login</button>
</form>
上記のコード例では、type="password"
を設定した <input>
要素が、パスワード入力欄として機能します。ユーザーが文字を入力すると、画面上ではマスキング(●など)されます。
<label>
の for
と対になるように設定するのが一般的です。HTML
<input type="password" placeholder="Input Password">
HTML
<input type="password" name="password" required>
HTML
<input type="password" name="password" maxlength="20">
autocomplete="on"
または autocomplete="off"
などで指定します。HTML
<input type="password" name="password" autocomplete="off">
ユーザーが入力したパスワードを一時的に表示する機能を追加すると、打ち間違いを防ぎやすくなります。
以下はJavaScript を使って、パスワード表示のオン/オフを切り替える例です。
HTML
<form>
<label for="user-password">Password : </label>
<input type="password" id="user-password" name="user-password">
<input type="checkbox" id="show-password">
<label for="show-password">Show</label>
</form>
<script>
const passwordInput = document.getElementById('user-password');
const showPasswordCheckbox = document.getElementById('show-password');
showPasswordCheckbox.addEventListener('change', () => {
if (showPasswordCheckbox.checked) {
passwordInput.type = 'text';
} else {
passwordInput.type = 'password';
}
});
</script>
ユーザーに強力なパスワードを設定してもらうために、以下のような工夫が考えられます。
フォーム送信時に、パスワードが未入力や規定に沿っていない場合はユーザーにわかりやすいエラーを表示しましょう。HTML の標準バリデーションを使ったり、JavaScript で独自のバリデーションを行うこともできます。
通信が暗号化されていない (HTTP) サイトでパスワードを送信すると、第三者に盗聴されるリスクが非常に高まります。パスワードを入力するフォームは必ず HTTPS (SSL/TLS) を利用しているページに設置し、暗号化通信を行いましょう。
ブラウザ側でパスワードを隠していても、サーバー側でパスワードを平文のまま保存していては意味がありません。サーバーサイドにおいては、以下のような対策が必須です。
pattern
属性やカスタム JavaScript を使ってクライアントサイドでも入力チェックを行うことは有効ですが、最終的にはサーバーサイドでの検証が必須です。クライアントサイドのチェックはユーザー体験向上のためと考えましょう。
HTML5 の pattern
属性を使うと、正規表現でパスワードの形式を指定できます。送信時に正規表現にマッチしない場合はエラーが表示され、フォーム送信がブロックされます。
HTML
<input
type="password"
name="password"
pattern="(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@$!%*?&#]).{8,}"
title="8文字以上で、英字と数字、記号を少なくとも1つ含めてください"
required
>
上の例では、数字・英字・特定の記号が少なくとも1つずつ含まれる、8文字以上の文字列を強制しています。
oninput
onfocus
/ onblur
<input type="password">
は、スクリーンリーダー上では通常テキスト入力欄と同様に扱われます。ただし、マスクされた文字は基本的に読み上げられません。<label>
と適切な関連付けを行い、パスワード入力欄だと明確に伝えましょう。
色のみに依存せず、テキストやアイコンなどで「パスワードを表示する」「パスワードを隠す」といったアクションが分かるようにすることが大切です。
キーボード操作やスクリーンリーダーを利用するユーザーにも配慮し、フォーカスが当たった際の視覚的インジケータを CSS で設定するなどの工夫も大切です。
autocomplete="current-password"
や autocomplete="new-password"
といったセマンティックな値を指定することが推奨される場合があります。HTML
<input type="password" name="password" autocomplete="current-password" required>
<input type="password"> は単純に “マスクされたテキスト入力欄” として使われることがほとんどですが、そこにはユーザーの大切な情報を守るという役割があります。安全な通信環境(HTTPS)であることや、ユーザーのパスワードがサーバーサイドで適切に管理されることは大前提です。また、ユーザーが使いやすいように工夫(パスワード可視化機能、強度判定、わかりやすいエラー表示など)を凝らすことで、良いユーザーエクスペリエンスと高いセキュリティを両立できます。
今後は、Web標準やブラウザの仕様変更に伴って、パスワード関連の機能(例えば新しい属性や API)が追加・変更される可能性もあります。こまめにブラウザ仕様やセキュリティ動向をチェックしつつ、最新のベストプラクティスに沿った実装を行うことが重要です。