パスワードは隠すべきか?
ウェブユーザビリティの第一人者である Jacob Nielsen (ヤコブ・ニールセン) 氏が、自身のブログ記事「Alertbox」の中で、「Stop Password Masking」という興味深い問題提起をしています。通常、ウェブサイトなどでパスワードを入力すると、画面には入力された文字列が表示されず、代わりに文字の数だけ「黒い点」が表示されます。こうした状況は、「フィードバックをユーザーに提供し、システムの状態を視覚化する」という基本的なユーザビリティ原則に反している、というのです。
さらにニールセン氏は、パスワードを隠すユーザーインターフェース (UI) について、以下のように否定的な見解を述べています。
- 画面上でパスワード表示を隠したところで、本当にスキルのある輩は、入力しているユーザーの手元のキーボードを見ることによって、どのキーが押されているか (どんなパスワードが入力されているか) がわかる。
- パスワードを画面上で隠すことによって、ユーザーが自分の入力内容に自信を持てなくなり、複雑なパスワードを入れなくなる (その結果、セキュリティレベルが下がる)。
ニールセン氏の見解は私自身、そのとおりだと思います。その一方で、以下のような理由から、パスワードは非表示にすべき、という考えもあるかと思います。
- パスワードを非表示にすることで、ユーザーに安心感を与えている。入力パスワードが傍受されるかどうか (適切に暗号化されて送信されるか) と、画面上のパスワードの表示/非表示との間には、技術仕様的には何の関係も無いが、パスワードが画面に表示されると、たとえ暗号化されているページであってもいたずらに不安感を感じてしまうユーザーは少なくないと思われる (その結果、簡単なパスワードを素早く入れようとする心理がはたらき、結果、セキュリティレベルが下がる)。
- 大人数の前でプロジェクターで表示しているシチュエーション (たとえばビジネスシーンでのデモンストレーションなど) では、パスワードを入力する際には非表示でないと都合が悪い。
- 視覚障害 (特に全盲) ユーザーがパスワードを入力する際、周囲に覗き見している人がいるかどうかユーザー自身わからないので、(ニールセン氏が言うようにキーボードを盗み見されてはしかたないのだが) リスクの軽減という意味でパスワードは隠されるべき。
以上を勘案しての、現時点での私の考えとしては、多少の不便はあっても慣例どおりデフォルトではパスワードを非表示にしておいて、ユーザーが任意でパスワードの表示 / 非表示を選択できる機能を付加するのがよいのではないか、と思うところです。ただ、この手の実装としてよく見られる、JavaScript を用いて <input>
要素の type
属性を "password"
から "text"
に切り替えるテクニックは、いくつか懸念があるため、慎重に考える必要がありそうです。このあたりについては、記事「パスワードの入力文字列を任意で表示する」にまとめていますので、併せてご覧いただければと思います。