• 診断項目 No.104/127
  • フォーム・パスワード入力
  • 重大度 低(low)

パスワードマネージャーに適したautocompleteとは?current-password・new-passwordの設定方法と診断基準

パスワードマネージャーに適したautocompleteとは、パスワード欄にcurrent-passwordまたはnew-passwordを指定することです。autocomplete=offが逆効果な理由、ログイン・登録・変更画面での書き方、診断基準を解説します。

結論(パスワードマネージャーに適した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
項目IDforms.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 の値は空白区切りのトークン列で、次の順序で構成されます。

  1. 任意:section-名前(同じページに複数のフォームがある場合の区別)
  2. 任意:shipping または billing
  3. 必須:項目名(username、current-password、new-password、one-time-code など)
  4. 任意:webauthn(パスキーの自動入力候補を表示させる)

例:autocomplete="current-password"、autocomplete="section-staff current-password"、autocomplete="current-password webauthn"。いずれも正しい指定です。

各値の意味と使う場面

値意味(HTML Standard)使う場面
current-passwordusername 欄で識別されるアカウントの現在のパスワードログイン、変更画面の「現在のパスワード」
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 のサーバー設定では変更できず、テンプレートを修正します。

セキュリティAIチェッカーを利用する

この項目を含む127項目を、URLを入れるだけで無料診断します。

参考資料