web-dev-qa-db-ja.com

UUIDを使用してモバイルアプリでユーザーを識別するリスク

私は既存の顧客基盤を持っています。顧客には予約があります。現在、私に直接連絡しなければ、予定にアクセスしたり変更したりすることはできません。

できる限り手間をかけずに、今後の予定にアクセスして変更する方法を提供したいと思います(顧客の努力が増えるほど、使用する機会が減り、利益が減ります)。

私の考えは次のとおりです。UUIDを生成し(可能な限り「安全にランダムに」)、SMSアプリ(Android/iOS)および関連アプリのURL(アプリ:// UUID)。

このURLでアプリを開くと、UUIDが格納され、これを使用して、アプリを介してHTTPSでWebサービスにリクエストが送信されます。HTTPSを使用すると、予定がフェッチされ、予定が変更される可能性があります(これが唯一の「書き込み」操作です)。

アプリは通常のWebブラウザーでは利用できないため、アプリのURLにUUIDを指定すると、ランダムなブラウザーのどこにでもURLを「残す」ことができなくなるため、URLを一度だけ使用すればよいと考えています。また、UUIDがそのようにこぼれないように、すべてのWebサービス要求がHTTPSのアプリを介して行われるように制御しています。

私はこのUUIDを「最後に永久に」にすることを考えていますが、お客様が自分のIDを紛失したと報告し、新しいIDを要求するオプション(古いものを無効にする)を追加します。

このスキームを考えると、私はそれを考えています:

  • スマートフォンを紛失すると、IDが失われます(アプリに保存されます)

  • SMS/URLを転送/失うことは、あなたのIDを失うことを意味します(IDを保存するためにアプリを最初に開いたとき以外は必要ありません。

  • UUIDを推測できる場合は弱い

私が考えていない落とし穴とセキュリティシナリオは何ですか?顧客にとっての使いやすさは重要であり(できれば何も入力しないことが望ましい)、情報は非公開であると見なされますが、それほど価値は高くありません。

N/PWの使用に関するコメント:

顧客ベースが存在するので、どの顧客がどのログインを持っているかを知る必要があります。私は彼らがオフィスでそれを自分で作成する必要があると考えています(できるだけ少ない入力を避けたいです)、または使用できる生成されたUN/PWを彼らに提供します(ただし、もう一度私はまたはそれを配布している)、またはオンラインで作成し、何らかの形で自分自身を識別して接続するのに十分な情報を提供している。

一般的に、私が知っているいくつかの情報を与えられれば、大騒ぎすることなく彼らが識別できる開始点であるスキームが欲しいです。ほんの少しの情報から多くを期待しているかもしれないので、私は提案を受け入れます。

3
TragedyStruck

主なリスクは、元のメッセージが漏洩した場合にリンクが後で公開されることです。

一意のトークンを使用する同様の戦略は、忘れられたパスワードのリセットまたはWebサイトで事前に生成されたアカウントの標準であり、次の注意事項があります。

  • トークンは推測できません(安全に生成されたUUIDはここで問題ありません)
  • uuid/linkは1つの(成功した)使用のみです
  • uuid/linkは、一定の時間が経過すると期限切れになります(正確な期間は、ユーザーの利便性と潜在的な公開との間のトレードオフです)

パスワードのリセット方法の詳細については、 https://www.troyhunt.com/everything-you-ever-wanted-to-know/ を参照してください。

あなたのアプローチでは、アプリがダウンロードされたら、次にアクセスするための2番目のキーを生成してローカルに保存する必要があります。これは、ユーザーが新しい電話を入手した場合や、初めて使用するのを忘れた場合に、新しいUUIDを使用してリンクを再発行する必要があることを意味します。

アプリではなく、un/pwを使用してWebサイトを作成し、アカウントを事前に作成し、UUIDを使用してサインアップリンクを各ユーザーに送信することをお勧めします(つまり、最初のアクセスでUN/PWを設定します)。そうすることで、簡単にアクセスできる1つの(できれば覚えやすい)ドメインとWebサイトを作成できます。また、サインアップリンクは後で再利用できず、期限切れになる可能性もあります。

2
Jack