ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Safariのパスワードの自動入力を防ごうとしたら結構めんどくさかった話

お客さんより修正依頼があった。

「ログインするときに自動入力で登録していたユーザーID&パスワードが、ユーザーを管理する画面でも同じように自動入力されて困る」って依頼。

これを聞いてははーんな俺。

あれかinput[name="***"]がログインフォームと管理のフォームで同じテンプレート使っているからだろう。と予測する。

つーことで、管理画面のフォームではinput[name="admin***"]とかにしてname属性を変えてみる。

しかし。。。。うまくいきませんでした。

何度試しても症状は変わりません。

うーむ。調べてみる。

https://www.seeds-std.co.jp/seedsblog/727.html

なるほど。どうやらautocomplete="off"って属性を用意すればいけるっぽい。やったね。

だめした・・・(°ω°; 何故?なんで?why?

www.softel.co.jp

・IE11以降とChromeは[type=”password”]な入力欄のautocomplete=”off”は無視するそうです。

what?まじ?

developer.mozilla.org

モダンなブラウザではパスワードを一括管理する機能が実装されています。ユーザが Web サイトでユーザ名とパスワードを入力した際、ブラウザはその値を記憶するかユーザに尋ねます。ユーザがその Web サイトを再び訪れた際には、ログインフィールドがブラウザに保存された値でオートフィルされます。 加えて、ユーザがマスターパスワードを設定すると、ログイン情報をマスターパスワードで暗号化した状態でブラウザに保存することができます。 マスターパスワードが用いられない場合でも、ブラウザのパスワード管理機能は純粋にセキュリティの向上につながります。パスワードをブラウザが保存すればユーザは覚えなくてもよいため、覚えなければならない場合よりも強固なパスワードをユーザが設定できるようになります。 このような理由から、モダンブラウザの多くはログインフィールドにおける autocomplete="off" をサポートしていません。

うーむ。なっとくっちゃー納得なんだけど、不必要なところにはいらないのよね。

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

(^ω^#

どうするのー?どうすればいいのー?「仕様です^^」って笑顔で返事すればいいのー?

しかし救世主(記事)登場

qiita.com

最終的に辿り着いたのが「縦横幅2pxで透明なフィールドを置く」という解決策でした。これなら自動入力されないし、ユーザーにもほとんど影響がありません。めんどくさいですね。

やってみたらマジで効きました。ありがたやーありがたやー。

謎なフィールドが2つほどコードに残りますが、一応修正はできました。。。うーむ。めんどくさい。