web-dev-qa-db-ja.com

独自の「パスワードの表示」機能を導入する際の落とし穴

私は、一部の新しいブラウザーで利用可能な「パスワードの表示」機能をWebサイトで、本質的にはそうでないブラウザーのポリフィルとしてエミュレートすることを検討しています。これを行う一般的な方法は passwordtext)の間で入力タイプを切り替えるJavaScript関数を呼び出す ですが、パスワードデータであることから、私は注意していますこれの。

  1. text入力にプレーンテキストのパスワードを配置すると、悪意のあるプラグインによってパスワードが奪われるリスクがありますか?

  2. 具体的には、最近のブラウザーは、ドットを使用した視覚的な難読化の他に、passwordタイプの入力に関するセキュリティメカニズムを実装していますか?

  3. 上記のリンクは、この種の機能に関する現在の業界のベストプラクティスを反映していますか?

9
0xdd

テキスト入力にプレーンテキストのパスワードを配置すると、悪意のあるプラグインによってパスワードが奪われるリスクがありますか?

悪意のあるプラグインは、フォームデータ、含まれているパスワードフィールドをこすり落としたり、書き込む前にログに記録したりできます。したがって、ここでタイプを変更しても違いはありません。

一般に、悪意のあるブラウザプラグインを防御しようとしても意味がありません。ユーザーが持っている場合、それはゲームオーバーです。

具体的には、最新のブラウザは、ドットを使用した視覚的な難読化以外に、パスワードタイプの入力に関するセキュリティメカニズムを実装していますか?

パスワードフィールドでは、デフォルトでオートコンプリートがオフになっています。ブラウザーがパスワードを保存し、後でそれらが候補としてリークする可能性を防ぐには、入力フィールドにautocomplete="off"を明示的に設定する必要があります。この should は、入力中の両方の提案と、以前の状態を自動入力する(たとえば、戻るボタンを使用する場合。

autocomplete="off"を無視する古いブラウザーがあるかもしれません-知っていると思いますが、ブラウザーはあらゆる種類の愚かなことをしていたのですが、私はそれが大きな割合であることを疑っています。それでも、問題になる可能性があります。

パスワードフィールドが存在すると、一部のブラウザは暗号化されていない接続についてより積極的に警告します。したがって、代わりにテキストフィールドを使用すると警告がミュートされる可能性がありますが、これは悪いことです。ただし、HSTSでTLSを使用している場合は問題ありません。

また、パスワードマネージャー(組み込みのブラウザーと外部のブラウザーの両方)に干渉する可能性があります。しかし、それはセキュリティの問題よりも使いやすさです。

上記のリンクは、この種の機能に関する現在の業界のベストプラクティスを反映していますか?

オートコンプリートの問題は別として、ショルダーサーフィンの固有のリスクに問題がない限り、これは問題ないと思います。しかし、私が見落としていることを誰が知っていますか。

「業界のベストプラクティス」と言ったので、DOMを直接操作する方法は、実際には通常行われている方法ではありませんが、セキュリティとは何の関係もありません。

正直なところ、私はこの機能の大ファンではないことを認めざるを得ません。少しハッキーな感じです。特別な理由がない限り、実装しないことをお勧めします。それは、他の何よりも、私の直感(および本質的でない機能への一般的な嫌悪感)に基づいています。

6
Anders

最大の脅威は、オートコンプリート機能です。ブラウザがオートコンプリート履歴にパスワードを保存しないことを確認してください。

  1. はい。ただし、これらの悪意のあるプラグインがJS自体を挿入してパスワードフィールドをテキストフィールドに変更する可能性があるため、これを説明するのは困難です。
  2. AFAIK、ブラウザは、文字が画面に読み取られないようにし、オートコンプリートがコンテンツを保存できないようにする(組み込みのパスワードマネージャーではありません)ことを除いて、パスワードフィールドに関して特別なことは何もしません。
  3. 業界のベストプラクティス(TM)でこれをまったく行わないことはかなり確実ですが、リスクを認識している限り、安全に行うことができます。

このスタックオーバーフローの質問を見てください

3
IceMage