1

プッシュのドキュメントから、この小さな実験にたどり着きました。

var FB = new Firebase(MYURL);
var ref = FB.push({test: 'push'}, function() { console.log('callback completed'); });
console.log(ref.name());

非同期コールバックが呼び出される前であっても、呼び出すとref.name()すぐにIDが返されることがわかります。これは、サーバーに相談せずにクライアントでIDが作成されることを意味しますか?私はそう思います、それは好奇心を引き起こしました:

2つのクライアントが同じIDを送信した場合、サーバーはどのように競合を処理しますか?2番目は最初を上書きしますか?

ここでは、2つのクライアントが衝突するIDを作成するのではなく、悪意のあるクライアントがIDをスプーフィングして、既存のレコードを上書きする可能性があると想定しています。これは、今後のセキュリティのルールを構成するときに注意する必要がある有効な懸念事項ですか?

さらに重要なことに、IDがどのように作成されているのかを理解して、IDを適切に使用できるようにすることに非常に興味があります。

4

1 に答える 1

2

プッシュによって作成されたIDは、プッシュが呼び出されたときに作成されます。これは、ネットワーク遅延を待つ必要のない非常に応答性の高いクライアントを作成できるようにするため、またクライアントがオフラインモードで動作できるようにするためです。

ID生成アルゴリズムは、タイムスタンプ(IDが順番に残るようにするため)とランダムなサフィックス(それよりも少し多くありますが、それが基本です)に基づいています。このアルゴリズムは、悪意のない2人のクライアントが私たちの生涯(または数百万年)で同じキーを選択しないように設計されています。

悪意のあるクライアントは、セキュリティが適用されていない場合、他のクライアントのIDを上書きする可能性があります(ただし、他のクライアントによって事前に生成されるIDを推測するのは困難です)。そうであれば、これらの場所にセキュリティ保護を提供する必要があります。それを防ぎたい。「push()」IDには、他の場所にはない独自のセキュリティニーズはないと思います。

于 2012-11-18T13:56:36.533 に答える