chrome で場当たり的に調べたので漏れあると思います。
指摘いただければ感謝です。
auto complete でフォームに入力処理の順番
- ブラウザがHTMLを取得
- HTML の ノードを展開
- form を探す
- FORM を見つけたら input[password] を探す。
- input / form に autocomplete=off がないことを確認
- コンプリートできるなら、keychain や保存済パスワードを検索
- 保存済パスワードに該当エントリがあれば補完候補として取り出し。
DomContentLoaded が重要。
DomContentLoaded が発火したタイミングで、ブラウザはパスワードを準備する。
このとき、HTML 中に form が存在し無くてはならない。
DomContentLoadedのタイミングで//form//input[@password] があるか
で補完の動作が変わってくる。
この処理が行われて、次に autocomplete = "off" / novalidate にの要素は、パスワードを補完しない
保存したID/パスワードがない場合はフォームの入力履歴から補完するが、パスワードは履歴に保存されないので補完されない
学習について
最後に form .submit で送信された時にパスワードの学習が行われる。
ただし、form.submit が行われても別ドメインへ連続リダイレクトをかければ学習しない??
なので、form タグを使わない(icloud) や submitを乗っ取りformdata で送信などとすれば、学習しない模様。
特にformタグを使わないアプローチだと、補完が一切行われないのである意味優秀といえる。
また、form タグを使ったとしても、ソースにFormが無ければ問題ない。script で document.body.onload で書き出せばcontent loaded のイベントでブラウザがform を識別しないから補完が効かない模様。
そのうちチャント調べたい。
2016-06-09 追記 パスワード保存オフはセキュリティを低下させる。
たまに、パスワード保存を拒否するため、このエントリに到達するひとが多いので書いておきます。
「パスワード保存をオフにするとセキュリティが高まる」という意味不明なセキュリティ神話が、SIer業界で囁かれてるようです。
パスワード保存を「させた」ほうがセキュリティが高いです。その理由は、パスワード保存しないとユーザーが漏洩させるからです。
- 何度も入力するうちに、盗み見られる。
- パスワード保存しないなら、モニタに付箋を貼る
- なんどもパスワード入力を繰り返すと、そのパスワードを変更してくれない。
盗み見られる!
特にに問題になるのは、「ショルダーハッキング」です。なんども入力しているとショルダーハックされる危険性が高まります。
暗号化されない!
次に問題になるのは、「パスワード」を外部キヲクに頼りがちになる点です。ブラウザのパスワード管理以上に安全な管理方法などあるのでしょうか。手帳にメモ、ファイルに記述など暗号化されない方法で保存される方が危険です。
使いまわされる!
最後に、癖の問題。同じパスを何度も入力していると、ユーザーがパスワード変更後にまた元に戻します。そして記憶に頼ると使い回しの危険性が高まります。
パスワードは保存させたほうが良い。
そのため、パス保存を拒否するのは「セキュリティ神話」なのです。
学習オフとか徒労してないで、Oauth を。
パスワードに有効期限とかパスワード安全性チェックとか、パスワードを学習しないようにするハックをしても、content script やプロキシで幾らでも回避できるので、Oauthをするのがマトモだと思うね。。。