api呼び出しをオブジェクトのIDにバインドする場合、このapiにすべてのオブジェクトをブルートフォースで取得させることができますか?MySQLについて考える場合、これは増分整数IDで完全に可能です。しかし、MongoDBはどうですか?IDは推測可能ですか?たとえば、1つのIDを知っている場合、他の(次、前の)IDを推測するのは簡単ですか?
ありがとう!
2019 年 1 月の更新:コメントで述べたように、以下の情報はバージョン 3.2まで当てはまります。バージョン 3.4+では仕様が変更され、代わりにマシン ID とプロセス ID が単一のランダムな 5 バイト値にマージされるようになりました。これにより、ドキュメントがどこから来たのかを把握するのが難しくなる可能性がありますが、生成が簡素化され、衝突の可能性が減少します。
元の回答:
セルジオの答えに+1、推測できるかどうか、ハッシュではなく、予測可能であるため、十分な時間があれば「ブルートフォース」になる可能性があります。可能性は、ObjectID がどのように生成されたか、およびどのように推測するかによって異なります。説明するには、まず、ここで仕様を読んでください。
次に、それを少しずつ分解してみましょう。
ソースを少し拡張します。ObjectID は、次の方法で生成できます。
そのため、個別に推測するのを難しくするためにできることはありますが、多くの事前の考慮や安全策を講じなくても、通常のデータ セットの場合、有効な ObjectID の範囲はかなり簡単に割り出すことができます。タイムスタンプ (何らかの方法でこれを操作しない限り)。
Mongo の ObjectId は、ブルート フォース攻撃 (さらに言えば、あらゆる攻撃) からの保護を意図したものではありませんでした。それらは単にグローバルな独自性を提供します。このユーザーはその ID を知っているべきではないため、ユーザーが一部のオブジェクトにアクセスできないと想定しないでください。
リソースを実際に保護するには、他の手法を使用してください。
不正アクセスから防御する場合は、アプリにいくつかの承認ロジックを配置します (正当なユーザーにはアクセスを許可し、それ以外のユーザーにはアクセスを拒否します)。
すべてのオブジェクトのダンプを妨げたい場合は、何らかのレート制限を使用してください。該当する場合は認可と組み合わせる。
オプションの読み物: GUID に関する Eric Lippert。