2011-01-03 9 views
37

私はMongoDBの自動的に生成されたIDが本当に好きです。彼らは本当に便利です。MongoDB:文書のIDを「公開」しても安全ですか?

ただし、一般に公開することはできませんか?

投稿集があり、/ posts/4d901acd8df94c1fe600009bのようなidパラメータをとり、/ postsページに情報が表示されているとします。

この方法で、ユーザー/ハッカーはドキュメントの実際のオブジェクトIDを知ることができます。それは大丈夫ですか、安全ではありませんか?

おかげ

答えて

25

Sez hereのように、自動的に生成されるIDには、3バイトのマシンID(おそらくMACアドレスのハッシュ)が含まれます。これらの3バイトをさまざまなIDで比較することで、誰かがあなたの内部ネットワークに関することを理解することは想像もできませんが、ペンタゴンで働いていなければ心配する価値はないと思われます(あなたはもっと脆弱です誤って設定されたApacheのような退屈なもの)。

それ以外のEpcylonの権利、 URLを介してIDを公開することは本質的に安全ではありません。それはもちろん、醜いかどうかは別の問題です。あなたは、それらを短くするためにそれらをベースにすることができます(これについて自分自身を考えていたのですが)。そして、彼らはすべて同じ約半分ですという奇妙な事実があります...

5

私は、本番環境でのMongoDBの経験がないので、真実としての私の答えを取ることはありませんが、それは安全であるべきではない理由を私は想像することはできません。

RDBMSのAuto-IDタイプの列と比較してください。あなたはそれらを常に外部に公開していますが、MongoDB IDでこれをやっていない理由はわかりません。

いつものように、セキュリティはあなたの入力を検証し、適切な保護なしに誰かをデータベースの近くに置かないようにする必要があります。正しく実行してください。データベース内の特定のオブジェクトを選択する方法を知っていても、それでも何もできないので問題にはなりません。

1

からの自動インクリメントIDの値を使用することは、 MySql。これは決してセキュリティ違反ではありません。

3

プライバシーセキュリティ問題と思われる可能性があります。

私は全く同じ問題に直面しています。 Mongoで生成されたIDに基づいてWebでアクセス可能なディレクトリにユーザが投稿したコンテンツを保存する場合、あるユーザが別のユーザのコンテンツにアクセスできるという予測可能性があると危険です。

私は他の人のアドバイスが正しいルートだと思います:ユーザー固有のプライベートコンテンツのURLを知っていればはそれにアクセスするには十分ではないはずです。アクセスしようとすると、一致するユーザーが要求を行っていることを確認する必要があります。

私はSymfony2で、Webルートのの外側にユーザ​​コンテンツを保存して、新しいルート/コントローラ経由でアクセスを許可することでこれを行うつもりです。レスポンスを渡す前に、ユーザの識別情報が検​​証されます。

5

私はmongodb _idが日付スタンプに基づいていると思っていました。

mongoidsを暗号化し、その結果をクライアント側の識別子として使用して(そして要求が戻ったときに暗号化解除する)価値があるかもしれないと心配している場合は、

暗号鍵が部分的に問題のユーザーまたはセッションの一意の属性に基づいている場合、ユーザーがコンテンツにアクセスするのが難しい場合、そのユーザーにアクセスすることが困難になります。

他の方法でユーザーを検証することは明らかに重要です。

0
  1. idがリンクのみを必要とする「非公開」コンテンツへのリンクを提供する場合、プライバシーに関する問題です。

  2. idがユーザーログインの下にあるコンテンツへのリンクを提供する場合、問題ありません。

MongoDb、SQLまたは他のIDであれ、問題ありません。 Idはデータの鍵です。このキーが、あなたがしてはならないコンテンツを見る必要があるだけの場合、それは問題です。そのような状況のために - 推測できないIDを生成してください。

関連する問題