4

共同作業リストに沿って、Firebase を使用して Web アプリを構築しようとしています。ユーザーのグループにはそれぞれ共有リストがあり、誰かが特定のリストにアクセスできるようにするには、グループを開始するか、グループに招待される必要があります。以前にサイトを使用したことがないユーザーを含め、招待は電子メールで送信されます。私の目的はサーバー側のコードを避けることであり、AngularJS を使用しています。各グループのリストには独自の URL があります。

サイトへのログインは、Facebook またはユーザー名と電子メールで行います。Facebook経由で他のFacebookユーザーを招待する方法があると思いますが、Facebookアプリは避けたいと思います。簡単にするために、ユーザーがログインしているにもかかわらず、一般的な招待システムに固執したいと思います。したがって、私はシステムを意図しています次のように動作します。

グループの既存のメンバーは、意図した新しいメンバーの電子メール アドレスを入力します。JavaScript はランダムな英数字のトークンを生成し、このトークンを使用して、次のように Firebase の招待場所の新しい子を作成します。

"invites": {
    "12345ABC": "Group Name"
},

これらのセキュリティ ルールで

"invites": {
    ".read": false,
    ".write": false,
    "$token": {
        ".read": true
    }
}

そうすれば、トークンがそこにあることがわかっている場合にのみトークンを読み取ることができます。

トークンで終わるグループの共有リストのメール アドレスと URL は、Firebase のメール キューの場所に子として追加されます。次に、Zapier (または同様のもの) は、この子が追加されたイベントを検出し、受信者に招待 URL を電子メールで送信します。email_queue は、招待受信者のプライバシー保護のために、Zapier またはその他の cron-type-thing によってのみ読み取ることができます。(編集:Zapierは、操作する場所を削除するオプションを提供し、スペースを節約するためにそれを使用すると思います)。

受け取ったリンクをクリックしたユーザーは、Facebook でログインするか、電子メールとパスワードでアカウントにサインアップすると、グループに追加されます。

上記は賢明ですか、それとも私が見ていないセキュリティホールがありますか?

副次的な質問: カウンターを維持する安全な方法が見当たらないため、電子メール アドレスの長いリストを持つ悪意のあるユーザーが多数の招待をトリガーしてシステムを妨害し、それによって電子メール プロバイダーの送信制限に達するのを防ぐ方法はありますか? ? (Zapier はこれを提供していないようです)。

4

1 に答える 1

1

はい、上記のように指定された場合、招待されていないユーザーがトークンを推測する方法はありません。招待ブランチより上のどこでも、読み取り条件が true と評価されないようにしてください。

副次的な答え:

私はそれを行うハックな方法を考えることができます。トークンが固定長の場合、ユーザーが送信するトークンの区切り文字列連結である別のフィールドを維持できます。次に、新しい招待を追加するには、最初にそれをコレクション文字列に追加してから、招待リストに追加します。セキュリティ式 .contains を使用して、新しいトークンがユーザーの招待トークン コレクションに存在することを強制します。

これはリアルタイムで行う方法ではありませんが、小規模な招待リストの場合は問題ないかもしれません。セキュリティを使用して、招待コレクションのサイズを特定のサイズ未満に強制します。タイムスタンプ ロジックを使用して、最後にトークン リストに追加されてからしばらく時間が経過した場合に、ユーザーがリストをクリアできるようにします。

于 2014-06-20T16:54:51.623 に答える