24

api呼び出しをオブジェクトのIDにバインドする場合、このapiにすべてのオブジェクトをブルートフォースで取得させることができますか?MySQLについて考える場合、これは増分整数IDで完全に可能です。しかし、MongoDBはどうですか?IDは推測可能ですか?たとえば、1つのIDを知っている場合、他の(次、前の)IDを推測するのは簡単ですか?

ありがとう!

4

2 に答える 2

24

2019 年 1 月の更新:コメントで述べたように、以下の情報はバージョン 3.2まで当てはまります。バージョン 3.4+では仕様が変更され、代わりにマシン ID とプロセス ID が単一のランダムな 5 バイト値にマージされるようになりました。これにより、ドキュメントがどこから来たのかを把握するのが難しくなる可能性がありますが、生成が簡素化され、衝突の可能性が減少します。

元の回答:

セルジオの答えに+1、推測できるかどうか、ハッシュではなく、予測可能であるため、十分な時間があれば「ブルートフォース」になる可能性があります。可能性は、ObjectID がどのように生成されたか、およびどのように推測するかによって異なります。説明するには、まず、ここで仕様を読んでください。

オブジェクト ID 仕様

次に、それを少しずつ分解してみましょう。

  • TimeStamp - データがいつ生成されたかについての一般的な考えがある限り、完全に予測可能
  • マシン - これは、いくつかのオプションの 1 つの MD5 ハッシュです。オプションの中には、他のオプションよりも簡単に判別できるものもありますが、環境に大きく依存します。
  • PID - 繰り返しますが、ここでは膨大な数の値ではなく、既知のソースから生成されたデータを調べることができます
  • 増分 - これが増分ではなく乱数である場合 (どちらも許可されます)、予測可能性が低くなります。

ソースを少し拡張します。ObjectID は、次の方法で生成できます。

  • MongoDB 自体 (ただし、移行、移動、更新可能)
  • ドライバー (データを挿入または更新する任意のマシン上)
  • アプリケーション (必要に応じて、独自の ObjectID を手動で挿入できます)

そのため、個別に推測するのを難しくするためにできることはありますが、多くの事前の考慮や安全策を講じなくても、通常のデータ セットの場合、有効な ObjectID の範囲はかなり簡単に割り出すことができます。タイムスタンプ (何らかの方法でこれを操作しない限り)。

于 2012-07-20T10:56:55.203 に答える
17

Mongo の ObjectId は、ブルート フォース攻撃 (さらに言えば、あらゆる攻撃) からの保護を意図したものではありませんでした。それらは単にグローバルな独自性を提供します。このユーザーはその ID を知っているべきではないため、ユーザーが一部のオブジェクトにアクセスできないと想定しないでください

リソースを実際に保護するには、他の手法を使用してください。

不正アクセスから防御する場合は、アプリにいくつかの承認ロジックを配置します (正当なユーザーにはアクセスを許可し、それ以外のユーザーにはアクセスを拒否します)。

すべてのオブジェクトのダンプを妨げたい場合は、何らかのレート制限を使用してください。該当する場合は認可と組み合わせる。

オプションの読み物: GUID に関する Eric Lippert

于 2012-07-20T10:28:35.237 に答える