HTTPS プロトコルは、ネットワーク上での盗聴(機密性)や改ざん(完全性)といった脅威から、ユーザのデータを保護できるように設計されています。 ユーザのデータを扱う Web サイトは、ユーザを攻撃者から守るために HTTPS を使うべきです。HTTPS を使わなければ、ユーザの情報(ログインの資格情報など)が盗まれるのは当たり前になってしまいます。このことを Firesheep が証明したのは有名です。
安全でないログインフォームを提供することは、幅広い攻撃手段を与えることになるため特に危険です。ネットワークを盗聴している者は、スニッフィングでユーザの機密情報を直接盗んだり、攻撃の幅を広げるために受信中のページを書き換えたりします。
Firefox の Web コンソール にあるセキュリティタブは、ログインフォームのようにパスワード入力を求めるページがある場合、それが安全でない通信路で提供されていると開発者に警告を出します。Web の開発者がユーザのログイン処理を保護できないシナリオには、以下のようなものが考えられます。
Web サイトがユーザ名とパスワードの入力を求めることはしばしばありますが、そのとても機微なデータを実際に格納しているわけではありません。とあるニュースサイトを例に考えると、ユーザが読み返したい記事を保存するかもしれませんが、ユーザに関するあらゆるデータは保存しないかもしれません。そのニュースサイトの Web 開発者は、サイトとユーザの機密情報を保護しようとはほとんど考えていないかもしれません。残念ながら、パスワードの使い回しは大きな問題となっており、ユーザは複数のサイト(ニュースサイト、SNS、メール、銀行)で同じパスワードを使います。つまり、自分たちのサイトが管理するユーザ名とパスワードに何者かがアクセスしたところで、自分たちに大きなリスクがあると思えなくとも、銀行の Web サイトでも同じパスワードでログインしているユーザにとっては非常に大きなリスクなのです。攻撃者はより賢くなっており、一つのサイトでユーザ名とパスワードの組を盗んだ後には、より金目のあるサイトに同じ組でログインできないか試しているのです。
- ログインフォームが HTTP で提供されている場合を考えます。たとえ、form の action 属性が HTTPS の URL であったとしても、ユーザのログインフォームは保護されません。なぜなら、これからユーザが受信するページを攻撃者が書き換えるのは可能だからです(例えば、ユーザの入力を記録するスクリプトを挿入できたり、機微なデータの送信先を攻撃者の管理するサーバに変更できたりします)。下のスクリーンショットは、この問題に対する警告が Web コンソールのセキュリティタブに表示されているようすです。
- form の action 属性が HTTP の URL である場合を考えます。 この場合、ユーザが入力したあらゆるデータはネットワーク上を平文で流れます。ユーザが入力したそのパスワードは、ユーザのコンピュータを離れてあなたの Web サーバに届くまでの間、ネットワークをスニッフィングしている全員がはっきりと読み取ることができます。次のスクリーンショットは、この問題を抱えている form の HTML ソースについて警告のメッセージが表示されているようすです。
- ログインフォームが HTTP の {{HTMLElement("iframe")}} (または、HTTP のフレーム内に埋め込まれた HTTPS の {{HTMLElement("iframe")}})で提供されている場合を考えます。たとえ最上層のページが HTTPS であったとしても、HTTP の {{HTMLElement("iframe")}} にパスワードの入力欄を含めてしまえば、HTTP のページに入力欄があるのと同じになってしまいます。攻撃者はページを書き換え、ユーザの機密情報を盗むことが可能です。