web-dev-qa-db-ja.com

MongoDB ObjectIDをユーザーに公開しても安全ですか(URIなど)?

MongoDBをバックエンドとして使用してRESTful APIを開発しています。プログラムで行う最も簡単なことは、MongoDBの_idフィールドをURIで使用することです。

https://api.example.com/collection/507c7f79bcf86cd7994f6c0e

ObjectIDの一部は作成タイムスタンプに基づいています。攻撃者がObjectIDの知識から得ることができる他に何かありますか?

7
Ben

Mongoのドキュメント によれば、ObjectIdの構築には次のものが使用されます。

ObjectId is a 12-byte BSON type, constructed using:

  a 4-byte value representing the seconds since the Unix Epoch,
  a 3-byte machine identifier,
  a 2-byte process id, and
  a 3-byte counter, starting with a random value.

だからあなたの質問に答えるために、

攻撃者がObjectIDの知識から得ることができる他に何かありますか?

タイムスタンプに加えて、マシン識別子、プロセスID、およびカウンター値も決定できるように思えます。

直接オブジェクト参照攻撃 (とにかくこれを行う必要があります)から自分を保護していることを確認してください。

8
Abe Miessler

MongoDB OIDは予測可能です。したがって、グループ1の人Aに、グループ2の人に属する同様に分類されたオブジェクトへのアクセスを許可しないなど、適用する必要があるアクセス制限がある場合は、アプリケーションがすべてのポイントにこれらのルールを適用していることを確認する必要があります。アクセス。

たとえば、悲惨な戦略は、ユーザーのOIDをブラウザーに保存し、おそらくauthZの後に取得して保存し、それをauthNに使用することです。サーバーのIDは、ブラウザに保存されたOIDをいじって、他の誰かと一致させます。

1
Rondo