私は mongodb を使用して小さな Web アプリケーションを作成していますが、mongoIds を URL などで公開することをお勧めします。
現在、ユーザー プロファイルに次の URL 構造を使用しています: http://example.com/user/MONGOID
これにはセキュリティ上の欠陥がありますか、それとも他の方法で推奨されませんか?
私は mongodb を使用して小さな Web アプリケーションを作成していますが、mongoIds を URL などで公開することをお勧めします。
現在、ユーザー プロファイルに次の URL 構造を使用しています: http://example.com/user/MONGOID
これにはセキュリティ上の欠陥がありますか、それとも他の方法で推奨されませんか?
いいえ、セキュリティへの影響はありません。
その人ができることは、あるユーザーの ID を推測するか、すべての ID を調べてシステムのすべてのユーザーを取得しようとすることだけです。
スタックオーバーフローを例に取ります。彼らはあなたと同じパターンを持っています:http://stackoverflow.com/users/352959
これは 352959 です あなたであり、何も悪いことはありません. ブラウザでこれを入力するたびにリダイレクトされる唯一のこと http://stackoverflow.com/users/352959/king-julien
.
これらの数字を反復してみると、次の人物はhttp://stackoverflow.com/users/352960
ジョンであることがわかります。そして確かhttp://stackoverflow.com/users/1
にリソースの作成者です。
答えは多くのことに依存します...
URL で ID を使用することは、通常はお勧めできません。OWASP によると、Web セキュリティ脆弱性リストのトップ 10 で 4 位にランクされています。しかし、それを使用してもプロジェクトが台無しになることはありません。
セキュリティの脆弱性を防ぐには、次のいずれかを行う必要があります。
Itを使用する_id
と、パブリック URL がバックエンドに結び付けられます。データベース テクノロジを変更する場合は、何らかの変換が必要になります。または、オブジェクトが破棄されて再度作成されるような変更を実行する必要があるかもしれませんが、_id
データベースのマージなど、別の .xml を使用します。そのため、URL を変更したくありません。
もう 1 つのことは_id
、適切な空間分布がないことです。適切なシャーディング キーにはなりません。タイムスタンプから派生しているため、すべて_id
が密接に関連しており、必要に応じて直線的です。それらは同じシャードに入る傾向があります (Mongo は後でそれらを拡散しますが、カーディナリティの高いキーが必要です)。
したがって、私は今すぐ支払うことを好み、最初からアプリケーション専用の id フィールドを使用します。必要に応じてフィールドに格納することもできます_id
が、ドキュメントに別のキーを追加してインデックスを作成し、それを URL で使用することを検討してください。