2012-12-05 9 views
11

MongodbにProducts配列があります。ユーザーが各商品を自分のページで見ることができるようにしたい:http://www.mysite.com/product/12345/Widget-Wodget各製品には増分整数ID(12345)がなく、代わりにBSON ID(5063a36bdeb13f7505000630)があるため、整数IDを追加するか、BSON IDを使用する必要があります。URLにbson IDを入れれば機密データが公開されますか?

  • 4バイトのタイムスタンプ、
  • 3バイトのマシン識別子、
  • 2バイトのプロセスID、
  • 3バイトカウンタ:BSON ID年代から

    は、PIDを含みます。

私は自分のURLにBSON IDを使用すれば安全な情報を外部に公開していますか?

+0

私のやり方は、私は通常、あまりにもちょうどURL短縮のためのことを、base62にBSON IDを符号化する、です。しかし、私が知る限り、これを行うことによって重大な問題は生じません。 –

+0

@SushantGupta関連、その場合:http://stackoverflow.com/questions/6338870/how-to-implement-a-short-url-like-urls-in-twitter – jcollum

+0

うん、うまくいきます。しかし、私のやり方では、URL短縮のためだけにデータベースやコレクションを管理する必要はありません。その素早い方法。これまでのところ、私はセキュリティ上の問題に遭遇していません:) –

答えて

15

私はあなたのマシンで特権を得るために使用することは考えていませんが、ObjectIdsを使ってどこでも多くの情報を公開しています。 、1をあなたのウェブサイトをクロールすることができことで

  • は、いくつかの隠されたオブジェクトに関する見つける:例えば、カウンターパートは、時間t1の間B9 .... 0X B1から....の0xからなる場合と、 t2では、これらの逆数内のObjectIdsを推測することができます。しかし、あなたがアクセス許可に
  • を強制する場合は、IDを推測することは、各ユーザの登録日付(非常に敏感でない情報が、何よりも良い)を知っている可能性が高い無用です
  • 実際の推測(には、公に利用可能とは対照的に)タイムスタンプからの営業時間スタッフによって作成されたオブジェクトの数
  • ユーザーが生成したオブジェクトのタイムスタンプから視聴者が生まれる時間帯を推定する:あなたのウェブサイトが主に昼食時に使用するWebサイトの場合、ObjectIdのピークを測定し、 8 PM UTCは、観客が
  • 米国西海岸にあった、より一般的に、あなたのウェブサイトのほとんどをクロールすることで、人はあなたのサービスの成功のタイムラインを構築することができることを意味しますあなたのユーザー数、ユーザーエンゲージメントのレベル、入手したサーバーの数、サーバーの再起動頻度に関する情報をいつでも知ることができます。営業日のものは、より可能性の高いクラッシュ+ソフトウェアリビジョン
  • 、おそらく

もランダムで、公平であるためには、ビジネス・プロセスおよびドメインに固有のその他の情報を見つけることがあるのに対し、週末に発生したPIDの変更は、より多くの可能性がクラッシュしていますidsは多くのことを推測することができます。主な問題は、誰かがあなたのサイトの統計的に重要な部分を削らないようにする必要があるということです。しかし、もし誰かが決定されれば、彼らは最終的に成功するでしょう。だから、この余分なタイムスタンプの情報をすべて提供するのは間違っているようです。

+2

私は隠されたオブジェクトについて理解していません、また、あなたは会社に連絡することができます時間を見て就業時間を推測することができます、ほとんどの企業は自由に自分のサイトの営業時間を表示する必要があります。 IDはサーバー側になるので、サーバー時間であり、クライアント時間ではありません。 BSON IDからタイムラインを構築するにはどうしたらいいですか? IDがデータベースまたはサーバーについて何を伝えるか全体的に予測する方法はありません。どのようにして、削除されたIDであってもすべてのIDを照会せずに何回再起動したかをどのように伝えることができますか? – Sammaye

+0

@Sammaye:私は自分の答えを編集しました。私はそれがはっきりしていることを願っています – guillaume

+0

最初の点はわずかですが、それはIDの増加とともに存在するRBAMによって解決されるべきですが、電子商取引サイトでは、誰もが利用可能な時代に嘘をついていない限り。また、ほとんどのサイトの各ユーザーのサインアップ日付は、グーグル、Facebook、YouTubeなどのサイトが実際の日付形式でサインアップしたときに表示されるため、役に立たないため、その統計情報を簡単にスクラップすることができます。ユーザーが生成したオブジェクトには依然としてserer側のオブジェクトIDがありますので、まだ表示されません。 – Sammaye

2

ObjectIDの情報を共有しても、セキュリティが損なわれることはありません。誰かが、ObjectIDが作成されたとき(タイムスタンプ)などの細かい詳細を推測することができますが、ObjectIDコンポーネントのどれも認証や認可に結びつけてはなりません。

電子商取引サイトを構築する場合、SEOは一般的にパブリックURLのための強力な検討事項です。この場合、通常、ObjectIDよりも短い、より意味のあるパスコンポーネントを持つ、より親しいURLを使用したいと考えています。

_idフィールドにデフォルトのObjectIDを使用する必要はありません。そのため、アプリケーションに関連するものを常に生成することができます。デフォルトのObjectIDは一意性の合理的な保証を提供するので、独自の_id割り当てを実装する場合は、これを考慮する必要があります。

も参照してください:

2

@Stennieが言ったように、そうでもありません。

PIDで始まるのをみましょう、ほとんどのハッカーではなく、彼らがちょうどだろう、と言うLinux上で、PIDを探して気にしないでしょう。

ps aux | grep mongod 

または類似した何かを。もちろん、これはハッカーがあなたのサーバーを実際にハックしたことを必要とし、私はpidだけに基づいて利用できる公開ハックがないことを知っています。あなたがマシンを再起動するとき、またはmongodがpidを変更することを考えれば、この情報はスパイしようとする人にとってまったく役に立たない。

マシンIDは公開されていないもう1ビットのデータです。正直言って、pingまたはdiggを使用すると、マシンIDだけではネットワークの理解を深めることができます。

質問に答えてください:いいえ、本当のセキュリティ上の脅威はなく、あなたが表示している情報は本当にMongoDB以外の人にとっては役に立たないものです。

また、私は一般に、電子商取引のための使用例では、小さいランダムID(多分_id 64エンコードを塩基)または上.htmlとIDをインクリメントオートと/product/product_title_ある、SEOフレンドリーなURLを使用して@Stennieに同意終わり。

+0

通常、ObjectIDはドライバ(MongoDBサーバではない)によって生成されるため、情報(PIDなど)はMongoDBではなくアプリケーションに関連します。異なるプロセス(例えば、Apacheワーカースレッド)はPIDを変化させるので、PIDがサーバの再起動に関連するという信頼できる推論をすることはできません。 – Stennie

関連する問題