31

Meteor 0.5.8では、次の変更が導入されました。

信頼できないコードでコレクション関数を更新および削除するための呼び出しで、任意のセレクターを使用できなくなりました。クライアントからこれらの関数を呼び出すときは(メソッドスタブ以外で)、単一のドキュメントIDを指定する必要があります。

したがって、クライアントコンソールからデータベースに任意の更新をプッシュする場合は、次のような操作を行う必要があります。

People.update({_id:People.findOne({name:'Bob'})['_id']}, {$set:{lastName:'Johns'}});

それ以外の:

People.update({name:'Bob'}, {$set:{lastName:'Johns'}});

このセキュリティの問題は、Meteor.Collection.allow関数と.deny関数をautopublishおよびinsecureパッケージと組み合わせて設定することで制御できると思いました。ChromeJavaScriptコンソールからデータベースを操作できるのが好きでした。

Meteor 0.5.8の変更の動機は何ですか?

4

1 に答える 1

28

Meteorブログから:

ルールを許可/拒否するための変更

0.5.8以降、イベントハンドラーなどのクライアント専用コードは、_idで指定された一度に1つのドキュメントのみを更新または削除できます。メソッドコードは、任意のMongoセレクターを使用して、一度に任意の数のドキュメントを操作できます。イベントハンドラーから複雑な更新を実行するには、Meteor.methodsを使用してメソッドを定義し、イベントハンドラーから呼び出します。

この変更により、許可/拒否APIが大幅に簡素化され、アプリケーション構造が改善され、攻撃者がサーバーに操作が許可されているかどうかを判断するために多くの作業を強制する可能性のあるDoS攻撃を回避し、@によって報告されたセキュリティの問題を修正します。 jan-glx。

コードを更新するには、許可ハンドラーと拒否ハンドラーを変更して、ドキュメントの配列ではなく単一のドキュメントを取得します。これにより、コードが大幅に簡素化されます。また、Mongoセレクターを使用するイベントハンドラーに更新または削除の呼び出しがあるかどうかを確認し(これは非常にまれです)、ある場合は、それらをメソッドに移動します。詳細については、ドキュメントの更新削除をご覧ください。

したがって、基本的に、私の観点からは、特定の知識(ドキュメントのIDなど)がなくても、動作がクライアントから任意のドキュメントのセットを更新および削除できるようにすることはほとんどありません。

プロトタイピング(私が推測しているのはあなたがしていることです)の場合、邪魔になる可能性があると思いますが、コードを本番環境に移行したい場合は、長所が短所を上回っていると思います。これは、セキュリティ宣言(allowおよびdeny)がこの変更後に指定しやすくなることにもなります。

それがあなたにもう少し情報を与えたことを願っています。

于 2013-03-17T19:37:05.233 に答える