web-dev-qa-db-ja.com

アカウントが存在する場合、ユーザーに開示しますか?

誰かが、特定のメールアドレスがウェブサイトの登録ユーザーによって使用されているかどうかを誰かが検出することは不可能であるべきだと私に言った。したがって、たとえば、ユーザーがパスワードをリセットするように要求した場合、メールがデータベースに存在するかどうかに関係なく、「パスワードを送信しました」と言う必要があります。そうでない場合、人々はこの機能を使用して、誰がメンバーであるかをチェックし、またスパムリストの有効性などをチェックすることができます。

しかし、同じメールを2回登録しようとすると、「メールはすでに登録されています」とFacebookが言っていることに気づきました。これは慣例が変わったことを意味しますか?ユーザーに知らせることはアカウントを明らかにすることよりも重要ですか?

54
forthrin

特定のログインが存在するかどうかを人々に知らせないのは、かなり古い伝統です。これが、UnixまたはWindowsシステムがユーザー資格情報を要求するときに、一般的な「間違ったユーザー名またはパスワード」メッセージでエラーに応答する理由です。このアイデアは、かなり昔ながらの攻撃のビジョンに基づいています。メインフレームに入りたい悪意のある人物が、システムに接続されているシリアル端末、またはモデム回線を介したTelnetインターフェイスに手を差し伸べることに成功することを想定しています。この攻撃者は オンライン辞書攻撃 の位置にいます:アクセスを許可するログインとパスワードのペアを推測しようとします。 「root」のような管理ログイン名は通常、通常のユーザーアカウントよりも保護されていました(「root」ユーザーは強力なパスワードを選択するのに優れていたため、少なくとも推測されたため)攻撃者は通常のユーザーアカウントを見つけようとしました。特に、通常のユーザーアカウントnames

見る 映画「戦争ゲーム」 (1983年から)は、状況がどのようになっていたかをよく示しています。

重要なポイントに注意してください:上記の攻撃シナリオでは、攻撃者は少なくともアカウントを取得したいが、通常の条件ではアカウントを取得できなかったか、またはwhoアカウントを持っています。

その映画から30年後の2013年です。 everybodyが無料で登録してアカウントを取得できるサーバーがあります。したがって、1つのアカウントを取得することは、攻撃者の目標ではなくなります。その代わり、攻撃者は既知のIDを使用してspecificアカウントにアクセスする必要があります。これは同じ状況ではありません。コンテキストが変更されました。したがって、古い伝承は必ずしも当てはまりません。


とにかく、ユーザーがFacebookに登録しようとすると、プロセスが機能することを期待します。その時点で、プロセスは1つのもっともらしい理由で失敗する可能性があります。これは、既に使用されている電子メールアドレスです。その事実をユーザーから隠すのは難しいでしょう...

ユーザーの電子メールアドレスを「保護」したい場合、登録プロセスは次のようにする必要があります。

  • ユーザーは自分の主張する電子メールを入力します。
  • 1回限りの登録リンクを含む電子メールがそのアドレスに送信されます。ただし、メールがすでに登録されている場合は、そのことを説明するメールが送信されます。電子メールがシステムにすでに存在していたかどうかについての手がかりは応答Webページに書き込まれません。
  • ユーザーは、電子メールからのリンクをたどって登録します。

このようなプロセスは、電子メールの検証プロセスを兼ねているので、それは一種の良いことです。ただし、待ち時間があるため(ユーザーはWebサイトから出て、メールリーダーを開き、受信メールを待つ必要があります)、ショッピングサイトにとって問題になる可能性があります(ユーザーは辛抱強くなく、買い物に行く傾向があります)他の場所でチェックアウトプロセスが煩雑であることが判明した場合)。また、この登録システムがスパミングマシンに悪用されるのを防ぐために、いくつかのガードレールが必要です。


Facebookのメンテナーにとって、登録プロセスをできるだけスムーズかつ迅速にすることは、ユーザーのプライバシーよりも重要であると言えると思います。本当に、その驚きは誰ですか?

52
Thomas Pornin

考慮する必要があるPIIリスクがあるかもしれません。 「全員」がFacebookアカウントを持っていると想定しても安全です。したがって、特定のメールが登録されていることを開示することは大したことではありません。

ただし、「depression-help.com」や「it-burns-when-I-tinkle.net」などの別のサービスを利用してください。特定の人/メールがサイトに登録されていることを一般に公開するのは問題でしょう。

また、ユーザーベースを意図的に小さくした小規模なサービスの場合、ユーザー名を開示すると、攻撃者に追加情報を提供して、そのようなアカウントを侵害する可能性があります 特定の1983年の映画

@ThomasPorninへのハットチップですが、私が提案したように、ユーザーアカウント名/メールを公開しないことについて十分な情報に基づいた決定を下すことの価値があるいくつかのケースがあると思います。

39
schroeder

誰もが100%幸せになるこの問題を解決するための優雅な方法は本当にありません。ユーザー名としてメールアドレスの使用を強制すると、特定のメールアドレスを持つ誰かがユーザーであるかどうかを簡単に判別できます(プライバシーの問題)。任意のユーザー名を許可した場合、特定のユーザー名がすでに使用されているかどうかを最終的に明らかにすることはできず、有効なユーザー名を見つけようとしているユーザーの速度を落とすための措置を講じることだけが実際に可能です。

新しいユーザー登録は、対処するのが最も難しい問題です。結局、ユーザー名の衝突に適切に対処する必要があるという事実を回避することができないためです。 1つの可能なオプションは次のとおりです。ユーザーにメールアドレス、提案されたユーザー名、および目的のパスワードを入力してもらいます。送信したら、パスワードが受け入れ可能であることを検証し、検証URLをユーザーにメールで送信します。

  • メールアドレスが既に使用されているが、別のユーザー名に関連付けられている場合は、そのユーザーにメールを送信し、アカウントを既に持っていることを思い出させ、パスワードをリセットするかどうか尋ねます。

  • 電子メールアドレスがまだ使用されていないが、ユーザー名が使用されている場合は、エラーメッセージをユーザーに電子メールで送信し、別のユーザー名を選択する必要があることを通知します。そのため、試行の間隔が長くなります。

  • メールアドレスとユーザー名の両方が新しい場合は、公式にする前に新しいユーザー名とパスワードで再認証する必要がある確認リンクをユーザーにメールで送信します。

  • しないでくださいパスワードに基づいてどちらか一方を識別できるという前提で、2人のユーザーが同じユーザー名を持つことを許可します。特に、2人のユーザーが同じユーザー名を共有できる場合、両方のユーザーに影響を与えることなく、ログイン試行の失敗によりユーザー名をロックアウトすることはできません。そして、神が禁ずる。もし彼らがいつか何らかの理由で同じパスワードを偶然に選んだとしたら、すべての地獄が解き放たれるだろう。

  • ユーザー名とパブリックIDに同じ値を使用しないでください。本当に必要な場合は、ユーザーが両方に同じ値を入力することを積極的に防ぐ必要はありませんが、デフォルトではユーザーを許可する必要があります(たとえば、メッセージフォーラムのようなもので)ログイン時のユーザー名とは必ずしも関係のない公開ニックネームを付けます。

  • ユーザーIDを順番に割り当てないでください。登録時に一意として生成および検証される、少なくとも31、好ましくは62ビットのランダム値を使用します。 31ビットと62ビットの値のいいところは、6文字と12文字のbase36文字列に適切に変換されることです。デバッグする場合、6〜17桁の10進値よりも、小文字または数字の6文字または12文字の文字列を覚える方がはるかに簡単です。最も難しいのは、無効なユーザーIDを指定する要求に応答することですが、偽の応答ですが、アルゴリズム的な手段では実際のユーザーID応答と簡単に区別できません。

覚えておいてください:特定のユーザーIDまたはユーザー名が有効かどうかを時々確認することから攻撃者を阻止することは、100%成功することはできません。あなたの目標は、実際のユーザーに不当に負担をかけることなく、可能な限り遅くて高価にすることです。実際のアナログについては、DVDとBlu-Rayの地域コードについて考えてください。プレーヤーの費用が500ドル以上のとき、地域コードは、ほとんどの人が別の地域から購入した映画を再生できないようにする効果的な方法でした。ブルーレイプレーヤーを80ドルで購入し、HDMIセレクターを20ドルで購入して元に戻すことができるようになったので、2〜3台のブルーレイプレーヤー(目的の地域ごとに1つ)を購入してスタックするだけで、映画ファンは止められません。それらを起動し、HDMIスイッチを介して実行します。

定期的なログインの場合、このログイン試行が失敗した理由についてわざと曖昧にしてください。しかし、考えられる理由についても同様に前向きにしてください...そして、それらを支援できる誰かの具体的な連絡先情報を伝えてください。失敗したログインを追跡し、失敗したログイン試行が多すぎる場合はアカウントをロックアウトします。

  • アカウントがロックアウトされたばかり、または現在ロックアウトされていることを、あからさまに伝えないでください。しかし、ログイン試行が失敗した可能性のあるいくつかの理由の1つとして、それについて言及することをためらわないでください。ログインしようとしているユーザーからアカウントがロックアウトされる可能性があるという事実を維持しても、セキュリティには役立ちません。

  • ログインに失敗したため、必ずしもアカウントを半永久的にロックアウトする必要はありません。多くの場合、あなたはおそらくすべきではありません、それからあなたは便利なサービス拒否攻撃を作成したでしょうから。アカウントで失敗したログイン試行が多すぎる場合は、1、6、または24時間「ソフト」ロックアウトを実行できます。この時点で、ロックは自動的に解除されます。これはoneシナリオであり、ユーザーに「後で再試行する」ように指示するのが正当です。

ログイン試行が失敗したときに表示される可能性のあるエラーメッセージの例:

入力したユーザー名またはパスワード、あるいはその両方が受け入れられませんでした。無効なユーザー名を入力したか、誤ったパスワードを使用したか、ログイン試行の失敗が多すぎるためにロックアウトされたアカウントでログインしようとした可能性があります。アカウントがロックアウトされている場合は、___に連絡してサポートを受けるか、待つ_アカウントが自動的にロック解除する時間]。このエラーメッセージは、理由に関係なく、失敗したすべてのログインで同じになることに注意してください。

問題が文字通り自動的に修正される場合を除き、「問題が発生しました。しばらくしてからもう一度お試しください」と伝えないでください。それは攻撃者をだますことはなく、正当なユーザーを深刻に困らせるでしょう。これは私の究極のペットのおしっこの1つであり、「セキュリティシアターの名の下に開発者が行う恐ろしいこと」の私のリストのトップ近くにあります。信じられないほど煩わしいことは別として、誰かのアカウントが危険にさらされている場合、あなたが彼らにしてもらいたい最後のことは、誰かの注意を引く前に後で待つことです。

7
Bitbang3r

対応するメールアドレスを持っている場合にアカウントを探すことができるのは、facebookの標準的な動作です。最近、多くの人々がそのオプションを無効にしましたが、それはまだフェイスブックが形成されている場所です。

フォーラムのモデレートを行うとき、私はその機能を頻繁に使用して、新しく登録されたアカウントが禁止されたユーザーの登録済みアカウントであるかどうかに関する情報を収集しました。

電子メールアドレスまたはユーザー名が本物かどうかを明らかにするWebサイトは、匿名性を攻撃する方法です。 TOR出口ノードのIPを使用していた誰かが再登録したケースを覚えています。彼がフェイスブックで共有した情報を通して彼の母親の名前をその人に伝えることができました。情報への道は、互いに関連付けられたニックネームの4つのフープを通過しました。

このような情報の開示により、 http://www.spokeo.com/ のような企業の運営が容易になります。

プライバシーを保護することになると、すべてのデータの機密性も考慮する必要があります。 1000人のユーザーがいるフォーラムに参加します。ユーザーは無害な情報をニックネームで投稿します。ユーザーは、自分の本当のIDに関連付けられた電子メールアドレスでフォーラムにログインしました。

1000人のユーザーがいるので、私がスタイルを測定し、1000人のユーザーのどれが私が探している人物であるかを情報を開示して特定できる可能性が高いです。その仕事に成功した場合、秘密のニックネームを得ました。

これで、そのニックネームでGoogle検索を実行したり、他のデータベースで[email protected]を検索したりできます。また、今後の文体攻撃を実行しやすくするために、より大きなテキストサンプルも取得しました。

反体制派を見つけたい政府レベルの攻撃者は、特定の電子メールアドレスが存在するかどうかを確認するために多くのWebサービスにクエリを実行するためのリソースを持っています。

プライバシーを保護したい場合は、登録されているメールアドレスを非表示にすることは理にかなっています。

4
Christian