web-dev-qa-db-ja.com

ユーザー名の代わりにメール

ユーザーが(もちろん、関連付けられたパスワードで)ログインするためのメインの識別子として電子メールを使用することのセキュリティへの影響について疑問に思っています。通常のユーザー名と同じように扱うことはできますか、または+の部分(例:[email protected])を削除して一意性を比較する前に電子メールアドレスを「サニタイズ」するなど、特別な注意を払う必要がありますか?

私がすぐに考えることができる1つの真の意味は、電子メールがシステムに登録されているかどうか(たとえば、パスワードチェックの失敗など)で公にチェックできないように注意することです。

17
Gregor Petrin

メールは通常、次の理由からユーザー名としては適切です。

  • ユーザーはそれを覚えています。
  • これは世界的にユニークであり、衝突の管理を簡素化します(あるユーザーが別のユーザーと同じログイン名を使用したい場合、そのうちの1人がミスをしました)。
  • 緊急時にサーバーがユーザーに連絡できるようにする場合に便利な「メール検証」システムと組み合わせることができます。

名目上、少なくともメールアドレスの右半分(「@」記号の後のドメイン名)では大文字と小文字が区別されないため、その部分を小文字に正規化する必要があります。これは、有効なドメインであると想定されているため、簡単です名前、したがってASCIIのサブセットに限定されます(注:.NETが インバリアントカルチャ)と呼ぶものを使用するように注意する必要があります 、およびJavaは ルートロケール を条件とします;そうでなければ、コードはトルコで壊れます)。

左側の場合、大文字と小文字の区別は受信サイトによって異なります。ほとんどのサイトでは、その部分も大文字と小文字が区別されません。小文字の正規化を行うのは「合理的」と思われます。これは、特定のサイトで大文字と小文字が区別される可能性が低いためです。 /明確な人々(つまり、[email protected]および[email protected]は、2つの異なるボブの有効なアドレスです)。したがって、比較のためにアドレス全体を小文字で正規化することをお勧めします(つまり、どのユーザーについて話しているのかを決定するため)。ただし、ユーザーにメールを送り返したい場合や、ユーザーに show したい場合は、アドレスを「そのまま」保持します(たとえば、「ようこそ」として[email protected] "バナー-ボブは自分の大文字の「B」がかなり好きかもしれません。

「+」記号について:あなたの視点から見ると、それは住所の一部です。この「+」は、各ユーザーが機能的に同等の多数のアドレスを生成する方法として一部のサイトで処理されます。ボブは[email protected][email protected][email protected]...これらのアドレスのいずれかに送信されたすべての電子メールはボブのメールボックスで終わりますが、ボブの目には、それらはボブがそのようにタイプする別個のアドレスです。 Bob expects 個別と見なされるアドレス。したがって、 "+"の処理は、本当に必要なものによって異なります。

  • 衝突の管理が簡単になるように一意の「ログイン名」が必要な場合は、アドレスを「そのまま」のままにします。 「+」を使用して特別なことをしないでください。
  • アカウントの一意性を強制したい場合人間のユーザーごとに(つまり、ボブに100万の個別のアカウントを作成させたくない)場合は、「 + "記号から" @ "記号への比較。しかし、この規則がほとんどのボブを抑止するとは信じないでください。 「+」なしで何十億ものメールアドレスを取得するのは簡単で安価です(ドメインを購入し、サーバーをレンタルしてホストするという究極の方法です)。

概要:登録時に入力したアドレスを保持し、表示およびメールの送信に「そのまま」使用します。 comparisons (つまり、ログイン時にユーザーのテーブルでユーザーエントリを見つけるなど)の場合は、電子メールを小文字に正規化します(インバリアントカルチャを使用)。

19
Thomas Pornin

ユーザー名として電子メールを使用することの主なリスクは、ユーザーに連絡する二次的な手段を放棄することです。多くの(ほとんど?)ユーザーは、複数のものに同じパスワードを使用します。ユーザー名とパスワードが危険にさらされており、ユーザー名が電子メールである場合、電子メールアカウントも危険にさらされる可能性があります。 SMSベースの回復システムのようなものを使用しない限り、これはアカウントの回復を非常に困難にする可能性があります。

5
AJ Henderson

電子メールアドレスは、以下の理由により、(バンキングなどの非常に機密性の高い機能の場合)ユーザー名としてよくありません。

  1. それは誰かが他の誰かのアカウントを悪意を持ってロックすることを可能にします(私があなたのメールアドレスを知っていて、バークレイズで銀行取引をしている場合、私は繰り返し間違ったパスワードを試みることによってあなたのアカウントからロックアウトすることができます)。
  2. 銀行サイトの他のサイトからハッキングされたユーザー名とパスワードの組み合わせを試すことができます。
  3. それは、それぞれにいくつかの一般的なパスワードを試す多くのアカウントを反復することを可能にします
  4. これにより、攻撃者が知る必要のある情報の量が減少します(基本的に、ユーザーIDは、書き留めたり記録したりすることが予想されるが、パスワードの有効な長さを拡張する少しの情報です)。
  5. メールアドレスは再利用できます。あなたはたまたま使用されたメールアドレスを再割り当てされて誰かがパスワードのリセットリクエストなどを実行できるようにしたくありません。

これはすべて、ユーザーが自分のユーザー名を覚えることができることに対してバランスを取る必要があります。多くのサイトでは、メールアドレスにリンクされたユーザー名送信機能があります。他のユーザーは、ユーザーIDとしてメールを使用することのメリットをすでにカバーしています。

3
Andy Boura

通常のユーザー名と同じように扱うことはできますか、または+の部分を削除して(たとえば、somebody + note @ example.org)、一意性を比較する前に電子メールアドレスを「サニタイズ」するなどの特別な注意を払う必要がありますか?

詳細については、 私はRFCを読むまで電子メールアドレスを検証する方法を知っていました を参照してください。ただし、以下のすべてが有効であるとは思わないため、アドレスのサニタイズは行いません。

電子メールアドレスをユーザー名として使用すると、正しく実装されていなければ sername enumeration になり、任意のユーザー名よりも対象となります-攻撃者は、有効なものを知っている可能性が高いため、ユーザーの公開メールアドレス。ただし、 これは解決可能な問題です

アカウントロックアウトDoSは、失敗したログイン試行の繰り返しやパスワードのリセットを電子メールアドレスとIPアドレスの両方で個別にスロットリングすることで軽減できます。

また、アクティベーションメールをクリックするように依頼して、すべての新しいユーザーのメールアドレスを検証する必要があります。これにより、メールアドレスがユーザーのアドレスであり、必要に応じてユーザーが将来アクセスをリセットできるようになります。 パスワードリセットシステムを使用して登録を組み合わせる すると、1石で2羽の鳥を殺すことができます。

1
SilverlightFox

ユーザー名としての電子メールは、潜在的なユーザーのかなりのクラスが自分の電子メールを長期間制御することができないため、不適切なアイデアです。 ISPが行き来し、何らかの理由でメールアドレスが使用できなくなったり、使用できなくなったりします。

1
ddyer