結論(パスワードマネージャーに適したautocomplete)
パスワードマネージャーに適したautocompleteとは、パスワード入力欄のautocomplete属性に、ログイン用ならcurrent-password、新規登録・変更用ならnew-passwordを指定することです。これでブラウザやパスワードマネージャーが「保存済みパスワードを入れる欄」か「強いパスワードを生成して保存する欄」かを正しく判断でき、利用者が長く一意なパスワードを使いやすくなります。autocomplete="off"は多くのブラウザで無視され、守りになりません。
この記事のポイント
- ログイン画面は current-password、新規登録・パスワード変更は new-password を指定します。
- OWASP ASVS 5.0.0 V6.2.7 と NIST SP 800-63B は、パスワードマネージャーや自動入力の利用を許可するよう求めています。
- 多くの現代のブラウザはログイン欄の autocomplete="off" をサポートしておらず、off は守りになりません。
- セキュリティAIチェッカーは、全パスワード欄に current-password か new-password のトークンがあれば○、1件でも無ければ△と判定します。
- current-password webauthn のようにパスキーと併記しても合格です。
| 診断項目名 | パスワードマネージャーに適したautocomplete |
|---|---|
| 項目ID | forms.password-autocomplete-policy |
| 分類 | フォーム・パスワード入力 |
| 重大度・配点の重み | 低(low) 重み 1 |
| 関連する標準・ガイドライン | OWASP ASVS 5.0.0 V6.2.7(貼り付け・ブラウザのパスワード補助・外部パスワードマネージャーを許可する)/NIST SP 800-63B(パスワードマネージャーの利用許可)/WHATWG HTML Standard「Autofill」(`current-password`・`new-password`・`webauthn` トークン)/OWASP WSTG-ATHN-05(Vulnerable Remember Password) |
パスワードマネージャーに適したautocompleteとは
パスワードマネージャーに適したautocompleteとは、パスワード入力欄の autocomplete 属性に、ログイン用なら current-password、新規登録・変更用なら new-password を指定することです。
<input type="password" name="password" autocomplete="current-password">
これらを指定すると、ブラウザやパスワードマネージャーが「保存済みのパスワードを入れる欄」か「強いパスワードを生成して保存する欄」かを正しく判断でき、利用者が長く一意なパスワードを使いやすくなります。
逆に autocomplete="off" でパスワードマネージャーを妨げると、利用者は覚えやすい短いパスワードや使い回しに流れがちです。
- OWASP ASVS 5.0.0 V6.2.7 は、貼り付け、ブラウザのパスワード補助、外部パスワードマネージャーを「許可すること」を要求しています。
- NIST SP 800-63B(Rev.4)も、検証者はパスワードマネージャーと自動入力機能の利用を許可しなければならない(SHALL)としています。
セキュリティAIチェッカーのこの項目は、取得したページのパスワード欄すべてに、用途を示す current-password または new-password が指定されているかを確認します。
autocomplete属性の構文と各値の意味
autocomplete 属性の構文(WHATWG HTML Standard)
WHATWG HTML Standard の自動入力(Autofill)では、autocomplete の値は空白区切りのトークン列で、次の順序で構成されます。
- 任意:
section-名前(同じページに複数のフォームがある場合の区別) - 任意:
shippingまたはbilling - 必須:項目名(
username、current-password、new-password、one-time-codeなど) - 任意:
webauthn(パスキーの自動入力候補を表示させる)
例:autocomplete="current-password"、autocomplete="section-staff current-password"、autocomplete="current-password webauthn"。いずれも正しい指定です。
各値の意味と使う場面
| 値 | 意味(HTML Standard) | 使う場面 |
|---|---|---|
current-password | username 欄で識別されるアカウントの現在のパスワード | ログイン、変更画面の「現在のパスワード」 |
new-password | 新しいパスワード(アカウント作成時やパスワード変更時) | 新規登録、パスワード変更・再設定 |
off | 入力値が非常に機微、再利用されない(ワンタイムの鍵等)、または独自の補完機能を持つ | パスワード欄には不適 |
| 未指定 | ブラウザが推測する | 推測が外れることがある |
web.dev の「Sign-in form best practices」は、ログインでは autocomplete="current-password"、登録・変更では new-password を使い、メールアドレスの入力欄にも autocomplete="username" を使うよう推奨しています。
なぜautocomplete="off"ではなくcurrent-password・new-passwordなのか
autocomplete="off" は効かないことが多い
MDN の「Turning off form autocompletion」は、多くの現代のブラウザがログイン欄の autocomplete="off" をサポートしておらず、off が指定されていてもログイン情報の保存を提案し、次回以降は自動入力すると説明しています。つまり、off は「守り」にならず、パスワードマネージャーの判断を不正確にするだけです。
用途を明示すると何が良くなるか
- ログイン画面(current-password):パスワードマネージャーが保存済みのパスワードを正しい欄に入れます。利用者は長いランダムなパスワードでも入力の手間がかかりません。
- 登録・変更画面(new-password):パスワードマネージャーが強いパスワードを提案・生成し、保存します。変更画面で古いパスワードが新しい欄に入ってしまう混乱も防げます。
パスワードマネージャーに適したautocompleteについてよくある誤解
- 「自動入力を許すと共用 PC で危険」:共用端末での保存はブラウザ側の設定・運用で管理するもので、サイト側で off にしても防げません。共用 PC では、利用者に保存しないよう案内するのが現実的です。
- 「new-password を付けると自動入力されない」:new-password は「新しいパスワードを提案する」欄であることを示すもので、登録・変更画面では正しい挙動です。ログイン画面に付けると、保存済みのパスワードが入らなくなります。
- 「パスキー対応したら不要」:
current-password webauthnのように併記でき、パスワードとパスキーの両方の自動入力候補を出せます。
パスワード欄への貼り付けを拒否していないかは「パスワード欄への貼り付けを許可」、64文字以上のパスワードを HTML で妨げていないかは「64文字以上のパスワードをHTMLで妨げない」で別に評価します。このページの項目は autocomplete 属性に集中しています。
パスワードマネージャーに適したautocompleteの診断基準(セキュリティAIチェッカー)
取得対象
トップページと、巡回した最大2ページ(同一オリジン)の HTML から、type="password" の input 要素をすべて抽出します(type の値の大文字・小文字は区別しません)。
判定方法
各パスワード欄の autocomplete 属性の値を小文字化して空白で分割し、トークンの中に current-password または new-password が含まれるかを調べます。section-… や webauthn 等の他のトークンが併記されていても合格です。
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | すべてのパスワード欄に current-password または new-password のトークンがある | 重み1 × 1.00 |
| △ 要確認(warn) | 1件以上の欄で、属性が無い、空、off、またはそれ以外の値(証拠欄に件数と、そのうち off の件数を表示) | 重み1 × 0.45 |
| 対象外(na) | 取得したページにパスワード欄が無い | 計算対象外 |
- 用途(ログインか新規登録か)が合っているかまでは判定しません。ログイン画面に
new-passwordが付いている場合も合格になるため、手動で確認してください。 - 重大度は low、重みは1です。直接の脆弱性ではなく、利用者が強いパスワードを使える環境づくりの評価です。
自治体サイトでの判定例
| サイトの状態 | 判定 |
|---|---|
| パスワード欄の無い広報サイト | 対象外 |
電子申請・施設予約のログイン画面で、パスワード欄が type="password" name="pw" のみ(autocomplete 属性なし) | △「1/1件で current-password/new-password が明示されていません(autocomplete=off は0件)」 |
職員ポータルで autocomplete="off" | △(off は1件) |
type="password" autocomplete="current-password webauthn" | ○ |
autocompleteが不適切だとどんなリスクがあるか
- 弱いパスワード・使い回しの誘発:パスワードマネージャーが働かないと、利用者は覚えやすい短いパスワードや、他サービスと同じパスワードを使いがちです。他サービスから漏れた ID・パスワードの組み合わせを試すリスト型攻撃(クレデンシャルスタッフィング)の成功率が上がります。
- フィッシング耐性の低下:パスワードマネージャーは正規のドメインでしか自動入力しないため、偽サイトに気づく手がかりになります。自動入力が使えないサイトでは、利用者が手入力に慣れ、偽サイトでも入力してしまいやすくなります。
- 誤った自動入力:用途が不明だと、変更画面の「新しいパスワード」欄に古いパスワードが自動入力される等の混乱が起き、問い合わせの増加につながります。
- この項目単独で直接の侵害につながる事例は確認していないため、重大度は low としています。
パスワード欄のautocompleteの設定方法(ログイン・登録・変更画面)
HTML(ログイン画面)
<form method="post" action="/login">
<label for="username">メールアドレス</label>
<input id="username" name="username" type="email" autocomplete="username" required>
<label for="current-password">パスワード</label>
<input id="current-password" name="password" type="password"
autocomplete="current-password" required minlength="8">
<button type="submit">ログイン</button>
</form>
HTML(新規登録・パスワード変更)
<form method="post" action="/account/password">
<input type="text" name="username" autocomplete="username"
value="taro@example.jp" hidden>
<label for="current-password">現在のパスワード</label>
<input id="current-password" type="password" name="current" autocomplete="current-password">
<label for="new-password">新しいパスワード</label>
<input id="new-password" type="password" name="new" autocomplete="new-password"
aria-describedby="pw-rule">
<p id="pw-rule">15文字以上を推奨します。パスワードマネージャーの生成機能も使えます。</p>
</form>
変更画面に(非表示でも)username 欄を置くと、パスワードマネージャーがどのアカウントのパスワードかを判断しやすくなります。
パスキーと併用する場合
<input type="text" name="username" autocomplete="username webauthn">
<input type="password" name="password" autocomplete="current-password webauthn">
CMS・パッケージ製品
テンプレートで autocomplete="off" が一律に付いていないか確認します。製品によっては標準テンプレートに既に current-password が付いているため、独自のカスタマイズで off に上書きしていないかも確認してください。委託先のパッケージでは、調達仕様書に「ASVS V6.2.7 に準拠しパスワードマネージャーを妨げないこと」を明記するとよいでしょう。
サーバー設定(Apache・nginx・IIS)では変更できない
autocomplete は HTML の属性のため、Apache・nginx・IIS の設定では変更できません。テンプレート(PHP・JSP・Razor・React コンポーネント等)を修正します。Next.js では、JSX で autoComplete="current-password"(キャメルケース)と書きます。
設定後の確認方法
curl -s https://www.city.example.lg.jp/login | grep -oiE '<input[^>]*type="?password"?[^>]*>'
出力された各タグに autocomplete="current-password" または new-password が含まれるかを確認します。ブラウザで実際にログインし、パスワード保存の提案と、次回の自動入力が行われることも確かめてください。
サイトを壊さないための注意点(ガードレール)
- 変更は HTML 属性の追加だけで、サーバー側の処理には影響しません。既存の
nameやidを変えると、利用者が保存済みのパスワードが自動入力されなくなることがあるため、属性の追加にとどめます。 - 自動入力を嫌う業務端末では、サイト側ではなく端末のブラウザポリシー(組織の管理設定)でパスワード保存を制御します。
- 貼り付け禁止(onpaste で拒否)や短い maxlength も、あわせて解除してください。
よくある質問(FAQ)
current-password と new-password はどう使い分けますか?
ログイン画面と、変更画面の「現在のパスワード」欄には current-password を使います。新規登録やパスワード変更・再設定の「新しいパスワード」欄には new-password を使います。
autocomplete="off" を付ければパスワードは保存されませんか?
保存されることが多いです。MDN は、多くの現代のブラウザがログイン欄の autocomplete="off" をサポートしておらず、指定されていても保存を提案し、次回以降は自動入力すると説明しています。off はパスワードマネージャーの判断を不正確にするだけです。
共用PCで自動入力されるのは危険ではありませんか?
共用端末での保存は、ブラウザ側の設定や運用で管理するもので、サイト側で off にしても防げません。共用PCでは保存しないよう利用者に案内し、業務端末では組織の管理設定(ブラウザポリシー)でパスワード保存を制御します。
ログイン画面に new-password を付けるとどうなりますか?
new-password は新しいパスワードを提案する欄であることを示すため、ログイン画面に付けると保存済みのパスワードが入らなくなります。診断ではこの場合も合格になるため、用途が合っているかは手動で確認してください。
パスキーに対応した場合、autocompleteはどう書きますか?
current-password webauthn や username webauthn のように、項目名の後ろに webauthn を併記します。パスワードとパスキーの両方の自動入力候補を出せます。
Next.jsではどう書きますか?
JSX ではキャメルケースで autoComplete="current-password" と書きます。autocomplete は HTML の属性なので、Apache・nginx・IIS のサーバー設定では変更できず、テンプレートを修正します。
この項目を含む127項目を、URLを入れるだけで無料診断します。
参考資料
- OWASP ASVS 5.0.0 V6 Authentication(V6.2.7)
- WHATWG HTML Standard「Autofill detail tokens」
- MDN HTML attribute: autocomplete
- web.dev「Sign-in form best practices」
- NIST SP 800-63B-4 Authentication and Authenticator Management
- MDN「How to turn off form autocompletion」
- OWASP WSTG-ATHN-05 Testing for Vulnerable Remember Password