Wednesday, March 13, 2013

Android 端末の不思議なパスワード記憶を autocomplete="off" で回避

Android 端末で見つけた不思議な症状です。以下のようなログインフォームでの送信時に、入力したパスワードを端末に保存している場合に発生します。

<h1>Sign in</h1>
....
<label>E-Mail</label>
<input type="email" name="email">
<label>Password</label>
<input type="password" name="password">
....

記憶したパスワードが保存元ページで補完されるのは理解できますが、他のページでも、input[type="password"] なフィールドに、パスワードが補完されるようになってしまいました。さらにやっかいなことに、直前の input フィールドに、パスワードとペアのメールアドレスが補完されてしまいました。

<h1>Editing User</h1>
....
<label>E-Mail</label>
<input type="email" name="email">
<label>Nickname</label>
<input type="text" name="nickname" value="(直前のフィールドに記憶されたパスワードとペアのメールアドレスが補完されてしまう!)">
<label>Password</label>
<input type="password" name="password" value="(保存されたパスワードが補完される)">
<label>Password Confirmation</label>
<input type="password" name="password_confirmation">
....

以下のように input[type="password"] のフィールドに autocomplete="off" 属性を付与することでパスワード/メールアドレスとも補完を無効にできました。

<label>Nickname</label>
<input type="text" name="nickname">
<label>Password</label>
<input type="password" name="password" autocomplete="off">
<label>Password Confirmation</label>
<input type="password" name="password_confirmation" autocomplete="off">

明らかにバグのように思えますが、パスワード記憶 + オートコンプリートとはこのようなものなのでしょうか?