MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

フォームのオートコンプリートを無効にするには

フォームのオートコンプリートを Web サイト側から無効にする方法を説明します。

デフォルト設定の場合、Web サイト上の <input> フィールドを通じてユーザが送信した情報はブラウザによって記憶されます。 これよってブラウザは、オートコンプリート(入力を受けたフィールドの補完候補をユーザに提示する機能)や、オートフィル(読み込まれたフィールドをあらかじめブラウザが補完する機能)を実現しています。

これらの機能はユーザのプライバシーに関わるかもしれないため、ブラウザはユーザ自身がこの機能を無効にできるようにしています。しかしながら、フォームで送信される情報の中には再利用しないもの(ワンタイムコードなど)や、機微な情報(公的な識別番号やクレジットカード番号など)があります。ブラウザのオートコンプリート機能が有効であっても、Web サイトによってはフィールドの値をブラウザに記憶させないほうが適切かもしれません。

フォームにおけるオートコンプリートを無効にするには、autocomplete 属性に "off" を指定することで実現できます。

autocomplete="off"

上記の設定はフォーム全体に適用することも、特定の input 要素に指定することも可能です。

<form method="post" action="/form" autocomplete="off">
[…]
</form>
<form method="post" action="/form">
  […]
  <div>
    <label for="cc">クレジットカード番号:</label>
    <input type="text" id="cc" name="cc" autocomplete="off">
  </div>
</form>

autocomplete="off" を指定すると、以下の 2 つの効果が生じます。

  • 同じようなフォームにおいて、今後ブラウザがオートコンプリートを行うためにデータを保存しないようにします。しかし、実際の動作はブラウザによって異なります。
  • ブラウザがフォームデータをセッション履歴にキャッシュしないようにします。フォームデータがセッション履歴にキャッシュされた場合、フォームの送信後に「戻る」ボタンで元のページに戻った際にユーザの入力データが表示されます。

autocomplete 属性に off が設定されている場合でも、ブラウザはオートコンプリートを行うことがあります。この予想外の挙動に開発者は戸惑うかもしれません。オートコンプリートを完全に無効にするには、その属性値に 任意の文字列を代入 するというトリックを用います。

autocomplete="nope"

任意に指定した文字列は 属性値として定義された値 に含まれていませんが、ブラウザのオートコンプリート機能は無効になります。

autocomplete 属性とログインフィールド

モダンなブラウザではパスワードを一括管理する機能が実装されています。ユーザが Web サイトでユーザ名とパスワードを入力した際、ブラウザはその値を記憶するかユーザに尋ねます。ユーザがその Web サイトを再び訪れた際には、ログインフィールドがブラウザに保存された値でオートフィルされます。

加えて、ユーザがマスターパスワードを設定すると、ログイン情報をマスターパスワードで暗号化した状態でブラウザに保存することができます。

マスターパスワードが用いられない場合でも、ブラウザのパスワード管理機能は純粋にセキュリティの向上につながります。パスワードをブラウザが保存すればユーザは覚えなくてもよいため、覚えなければならない場合よりも強固なパスワードをユーザが設定できるようになります。

このような理由から、モダンブラウザの多くはログインフィールドにおける autocomplete="off" をサポートしていません。

  • Web サイトが <form>autocomplete="off" を設定しており、かつその <form> 内にユーザ名とパスワードの <input> フィールドが含まれていた場合でも、ブラウザはログイン情報を記憶するか尋ねることになります。そしてユーザが同意すれば、次回の訪問時にログインフィールドをオートフィルします。
  • Web サイトがユーザ名とパスワードの <input> フィールドに autocomplete="off" を設定していた場合でも、ブラウザはログイン情報を記憶するか尋ねることになります。そしてユーザが同意すれば、次回の訪問時にログインフィールドをオートフィルします。

この挙動は Firefox 38 以降、Google Chrome 34 以降、Internet Explorer 11 以降で共通です。

他人のパスワードを指定するようなユーザ管理画面において、パスワードフィールドのオートフィルを抑止したい場合、autocomplete="new-password" を指定するべきです。ただし、この機能はどのブラウザでもまだ実装されていません。

ドキュメントのタグと貢献者

 このページの貢献者: hashedhyphen
 最終更新者: hashedhyphen,