2012-05-04 11 views
2

ユーザーがクライアント側モデル/コレクションにアクセス/変更することを防ぐにはどうすればよいですか?Meteorjsモデル/コレクションはクライアント側からアクセス可能です。セキュリティの問題?

+0

ようこそ!あなたの質問はあまりにも一般的です。これまでに何を試してみましたか? – vyegorov

+0

ユーザーがクライアント側のオブジェクトにアクセスできないようにする方法はありません。\ – thomasloh

+0

Meteor 0.5.0は、必要なものだけを行う 'allow'と' deny'を追加しました。 – debergalis

答えて

2

Mattが述べたように、回避策はもう必要ありません。しかし、標準として、自動公開パッケージを削除してシステムを保護する必要があります。 http://docs.meteor.com/#meteor_collection

+0

有望!それを見ている。ありがとう! – thomasloh

+1

この回避策はMeteor 0.5.0以降では必要ありません。 – debergalis

7

allowおよびdenyを使用して、各クライアントが許可するデータベースの変更を定義します。ドキュメントから

クライアントは、挿入、更新、またはコレクションに削除を呼び出すと、コレクションの許可および拒否コールバックが書き込みを許可すべきかどうかを判断するために、サーバー上で呼ばれています。少なくとも1つの許可コールバックが書き込みを許可し、拒否コールバックが書き込みを拒否しない場合、書き込みは続行されます。

これらのチェックは、クライアントがイベントハンドラ内からupdateを呼び出すなどして、データベースに直接書き込みを試みた場合にのみ実行されます。サーバーコードは信頼されており、許可と拒否の制限を受けません。これには、Meteor.callで呼び出されるメソッドが含まれます。許可と拒否に頼るのではなく、独自のアクセスチェックが必要です。

好きなだけ何度でも呼び出すことができます。各呼び出しには、挿入、更新、削除の機能の組み合わせを含めることができます。操作が許可されるべきであると考えるならば、関数は真を返すべきです。それ以外の場合はfalseを返すか、まったく何も返さない(未定義)。その場合、Meteorはコレクションに関する他の許可ルールを検索し続けます。

+0

さらに、読み取りを保護するために、 'Meteor.publish'関数の中で' this.userId'を使用するクエリを持つカーソルを返します。 '$ meteor remove autopublish insecure'を実行して、すべてのデータをクライアントに公開し、クライアントからのほとんどの変更を許可する初心者オプションを無効にすることも望みます。 –

+0

今日学んだように、 'allow 'も使用しない限り、' deny'を使うことはできません。 「コレクションに許可ルールを設定しないと、コレクションへのすべてのクライアントの書き込みが拒否され、サーバー側のコードからコレクションに書き込むことが可能になります」とドキュメントに埋め込まれています。 –

関連する問題