iOS9.0.2のSafariで意図しないフォームにユーザー名が自動入力される現象を調べた時のメモ


発生した現象

ログインIDとパスワードを保存しているサイトで、ユーザー情報を編集する画面を開いた際に本来メールアドレスを入力する欄にログインIDが補完された。
iOS9.0.2でのみ発生。

再現してみる

とりあえず下記のような最小限のログインフォームのようなものを作ってlogin_idとpasswordの値を保存した。

<form method="POST">
  <div>
    login_id<input type="text" name="login_id">
  </div>
  <div>
    password<input type="password" name="password">
  </div>
  <div>
    <input type="submit">
  </div>
</form>


自動入力が働いた時と同じ名前の入力欄があるページを作って開いてみる。

<form method="POST">
  <div>
    email<input type="text" name="email">
  </div>
  <div>
    <input type="submit">
  </div>
</form>

あれ…入力されない…

色々試してみたところpasswdという名前の欄を追加すると再現することが分かった。(現象が発生したページにも存在する)

<form method="POST">
  <div>
    email<input type="text" name="email">
  </div>
  <div>
    passwd<input type="text" name="passwd">
  </div>
  <div>
    <input type="submit">
  </div>
</form>

半端に略されてるのが気になりnameをpasswordにしても同様の動きをした。

ちなみにpasswdのtypeをpasswordにするとパスワードまで補完されてしまった。(name違うのに)

<form method="POST">
  <div>
    email<input type="text" name="email">
  </div>
  <div>
    passwd<input type="password" name="passwd">
  </div>
  <div>
    <input type="submit">
  </div>
</form>

もう少し調べた

ユーザー名っぽい名前の欄とパスワードっぽい名前の欄があるとログインフォームだと判定されるのか、保存してあるユーザー名をユーザー名っぽい欄に入れることが分かった。

<form method="POST">
  <div>
    foo<input type="text" name="foo">
  </div>
  <div>
    username<input type="text" name="username">
  </div>
  <div>
    bar<input type="text" name="bar">
  </div>
  <div>
    passwd<input type="text" name="passwd">
  </div>
  <div>
    <input type="submit">
  </div>
</form>

ユーザー名っぽい名前の欄が無ければパスワードっぽい名前の欄の直前に入る模様

<form method="POST">
  <div>
    foo<input type="text" name="foo">
  </div>
  <div>
    bar<input type="text" name="bar">
  </div>
  <div>
    passwd<input type="text" name="passwd">
  </div>
  <div>
    <input type="submit">
  </div>
</form>

色々試してみた

ユーザー名っぽい名前

  • email
  • id
  • login_id
  • user_id
  • login_name
  • user_name
  • username
  • loginname

ユーザー名っぽくない名前

  • user
  • name
  • loginid
  • userid

パスワードっぽい名前

  • passwd
  • password
  • user_passwd
  • login_passwd

パスワードっぽくない名前

  • pass
  • pwd
  • pword
  • userpasswd
  • loginpasswd

ユーザー名っぽくない文字列同士でも組み合わせるとユーザー名っぽい文字列になったりする。
パスワードはpasswd、passwordあたりが単語として含まれていると認識される?
よくわからない。

結局

パスワードっぽかった欄の名前をパスワードっぽくない名前に変更することで凌いだ。

関連してそうな記事

iOS 9.0.1のSafariでログインフォームの自動入力が効かない

逆に自動入力してくれない話。
バージョンが近いし何か怪しい…

Safariのオートコンプリートの不思議な挙動

iOSの話ではないけど似た挙動の話。
この記事のオートコンプリートを抑止する方法は、パスワードっぽい欄のtypeがpasswordならiOSでも有効だった。