次のような構造で満たされたコレクションがあります。
{
"_id": {
"$oid": "xxxxxxxxxxxxxxxxxx"
},
"sections": {
"Some Cool Section" : {
"sources" : ["source1", "source2", "source3"]
}
"An Awesome Section" : {
"sources" : ["source1", "source2", "source3"]
}
},
"username": "boatzart"
}
ユーザーが新しい「セクション」を任意に追加できるようにする必要があるため、pymongo を使用して次のようにセクションを追加できます。
userid = bson.ObjectId('xxxxxxxxxxxxxxxxxx')
sectionname = getUnsafeUserInput()
mongo.db.userprofiles.update({'_id' : userid},
{ '$set' : { 'sections.'+sectionname: { 'sources': []} } }
)
sectionname は安全でないユーザー入力に由来するため、一部の悪意のあるユーザーは、セクション名にピリオドなどを入れてデータベースをめちゃくちゃにすることができます。英数字以外の文字を簡単に削除できますが、これを行うにはもっと良い方法があるはずだと感じています。
入れ子になったフィールドを既存のドキュメントに挿入し、コンテンツをスクラブする必要がないより良い方法はありますか?
そうでない場合、どのキャラクターを安全でないと見なす必要がありますか? すべて非英数字? 生理だけ?ピリオドとドル記号?