2

私は mysql のバックグラウンドを持っており、mysql を使用する際の典型的なセキュリティ上の懸念を認識しています。

現在、mongodb (Java ドライバー) を使用しています。

セキュリティ上の懸念事項と、セキュリティ上の問題を回避するために考えられる方法は何ですか?

特にこれらの領域:

1) get/post ごとに何かする必要がありますか?

2) アプリケーションからの Cookie をクライアント側に保存し、後でそれらを読み取ります (現在、保存する情報はユーザーの場所のみであり、機密情報はありません)。注意すべきことはありますか?

3) ユーザーが送信するフォームにテキスト ボックス、テキスト領域があります。mongo にデータを保存する前に何か確認する必要がありますか?

運用中の既存のアプリケーションでセキュリティの問題のインスタンスを提供できる人はいますか?

4

2 に答える 2

4

実際、Mongo でインジェクションを実行することは可能です。私の経験は Ruby ですが、次のことを考慮してください。

Request: /foo?id=1234
id = query_param["id"]
collection.find({_id: id})
# collection.find({_id: 1234})

無害に思えますよね?ただし、HTTP ライブラリによっては、特定のクエリ文字列をデータ構造として解析することになる場合があります。

Request: /foo?id[$gt]=0
# query_param["id"] => {"$gt": 0}
collection.find({_id: id})
# collection.find({_id: {"$gt": 0}})

これは、厳密に型指定された言語ではあまり危険ではありませんが、それでも注意が必要です。

ここでの一般的な対処法は、インバウンド パラメータ データを期待する型に常にキャストし、型が一致しない場合に激しく失敗するようにすることです。これは、Cookie データだけでなく、信頼できないソースからのその他のデータにも適用されます。積極的なキャストは、巧妙なユーザーが値の代わりに演算子ハッシュを渡してクエリを変更するのを防ぎます。

MongoDBのドキュメントにも同様に次のように書かれています。

MongoDB のクエリ言語のフィールド名には意味があります。ドル記号 (つまり $) は、演算子 (つまり $inc) を表すために使用される予約文字です。したがって、アプリケーションのユーザーが入力に演算子を挿入できないようにする必要があります。

この回答からも価値が得られるかもしれません。

于 2013-07-27T06:47:25.850 に答える