私のすべてのユーザーがデータを挿入/破棄できないようにしたいと思います。クライアント側のMongoDB APIをどのようにして保護しますか?
答えて
[UPDATE]コレクションを確保するためのさまざまなソリューションを提供し、公式文書化し、認証パッケージが用意されました。 CRUDレベルで
:
[サーバ] collection.allow(オプション)とcollection.deny(オプション)。このコレクションのデフォルトの書き込みメソッドを制限します。コレクションのいずれかがコレクションで呼び出されると、そのコレクションのすべての書き込みメソッドは、安全でないパッケージに関係なく制限されます。
また、insecure
もあり、クライアントからの完全な書き込みアクセスを削除します。
ソース:Getting Started with Auth(ダン・dascalescu @のおかげで)
[OLD ANSWER]
はどうやら認証パッケージにそこ作業している上、完全な制御を取る任意のユーザーを避けるべきです(?)今のところdb。また、独自の突然変異(メソッド)を定義して既存の解決策(回避策)があり、不正な操作を実行しようとすると失敗することを示唆している人もいます。私はそれをはるかに良くしませんでしたが、Authパッケージが行レベルで通常の認証ロジックを実装できるようになるとは思えないので、これはしばしば必要になると思います。開発者が何を言わなければならないかを見なければならないでしょう。
[EDIT] 私の考えを確認しているようだが見つかり何か:
現在クライアントがコレクションへの完全な書き込みアクセス権を与えられています。彼らは任意のMongo更新コマンドを実行できます。認証を作成すると、クライアントの直接アクセスを挿入、更新、削除するように制限できます。バリデータやその他のORM風の機能も検討しています。この回答の
出典:
Accessing to DB at client side as in server side with meteor
まだこれを行うには、文書化方法はありませんが、ここであなたが望む何をすべきいくつかのコードです:
Foo = new Meteor.Collection("foo");
...
if (Meteor.is_server) {
Meteor.startup(function() {
Meteor.default_server.method_handlers['/foo/insert'] = function() {};
Meteor.default_server.method_handlers['/foo/update'] = function() {};
Meteor.default_server.method_handlers['/foo/remove'] = function() {};
});
}
これにより、デフォルトの挿入/更新/削除メソッドが無効になります。クライアントはデータベースに挿入しようとすることができますが、サーバーは何も実行しません。また、サーバーが応答すると、クライアントはローカルに作成された項目に気づき、削除します。
挿入/更新/削除は引き続きサーバー上で動作します。 Meteor.methodsを使用してメソッドを作成する必要があります。Meteor.methodは、サーバー上で実行され、データベースへの書き込みを実行します。
このすべては、認証ブランチの着陸時に変更されます。そのようなことが起こると、サーバー上のデータベース書き込みを検査して承認するためのバリデーターを提供することができます。ここではもう少し詳細です:http://news.ycombinator.com/item?id=3825063
すごく、ありがとう、すべての情報!これが成熟しているのを待つことはできません。 – TK421
コレクションをクライアントから読み取らないようにすることもできますか? – HansPinckaers
Nevermind;自動公開を削除するだけです。 'meteor remove autopublish' – HansPinckaers
より簡潔な方法:
_.each(['collection1', 'collection2'], function(collection){
_.each(['insert','update', 'remove'], function(method){
Meteor.default_server.method_handlers['/' + collection + '/' + method] = function(){}
});
});
またはそれをより慣用的にする:
は流星を拡張:
_.extend(Meteor.Collection.prototype, {
remove_client_access: function(methods){
var self = this;
if(!methods) methods = ['insert','update','remove'];
if(typeof methods === 'String') methods = [methods];
_.each(methods, function(method){
Meteor.default_server.method_handlers[self._prefix + method] = function(){}
});
}
});
コールは単純です:
List.remove_client_access() // restrict all
List.remove_client_access('remove') //restrict one
List.remove_client_access(['remove','update']) //restrict more than one
v0.5.0では認証が導入されているため、これはもはや必要ではないことに言及したいと思います。 http://docs.meteor.com/#accounts_apiを参照してください。 @greg:あなたの答えを更新する可能性がありますか? –
私は流星に新しいですが、私がこれまでに遭遇していることはあなたは、クライアントがサーバ側でfind
コマンドにパラメータを追加することで、データベースにアクセスすることができますどのよう制限することができ、これらの二つの点
ある
publish
コマンド。クライアントがCollection.find({})
を呼び出したときに、返される結果は、(私は流星0.5を持っているに建設され、例えば、Collection.find({user: this.userId})
(もPublish certain information for Meteor.users and more information for Meteor.userとhttp://docs.meteor.com/#meteor_publishを参照)一つのことになり、サーバー側でどのように対応しています。 9)は、クライアントがIDで項目
update
のみを使用できるようになり、セレクタを使用しないことです。準拠していない試行がある場合、クライアントのコンソールにエラーが記録されます。403: "Not permitted. Untrusted code may only update documents by ID."
(Understanding "Not permitted. Untrusted code may only update documents by ID." Meteor error参照)。数2の観点
、あなたはMeteor.call
でクライアントが利用可能なリモート・プロシージャ・コールを行うために、サーバー側でMeteor.methods
を使用する必要があります。
- 1. APIキーでクライアント側で使用するRESTサービスの保護
- 2. どのようにしてCookieを保護できますか?
- 3. クライアント側でデータを保護する
- 4. キャスティングはどのような保護をしていますか?
- 5. linuxはどのようにメモリを保護しますか?
- 6. firebaseルールセットはどのようにデータベースを保護しますか?
- 7. GrailsでXSRFをどのように保護しますか?
- 8. どのようにしてクライアント上の無限ループからMeteorサーバを保護できますか?
- 9. MongoDBはクライアント側の操作を照会していますか?
- 10. AWS APIゲートウェイへのJavaクライアント側の呼び出しをどのようにして行うのですか?
- 11. クライアント側のコードを保護するにはどうすればよいですか?ライセンスキー?
- 12. は、どのように私は、外部APIを使用してサーバ側からクライアント側のjs流星
- 13. イメージをクライアント側にファイルとして保存しますか?
- 14. どのようにしてベクターをミューテックスで保護できますか?
- 15. 新規性がクライアント側であるSaaSアプリケーションを保護するにはどうすればよいですか?
- 16. クライアント(JavaScript、Android、iOSなど)のAPIキーを保護する
- 17. html要素の値はどのようにして保護されますか?
- 18. MongoDBを保護
- 19. クライアント側にデータを保存する - 操作から保護する方法?
- 20. AndroidデバイスでREST APIによる認証を保護していますか?
- 21. クライアント側のセキュリティで保護されたURLを傍受する
- 22. Vue.jsでクライアント側のルートを保護する方法は?
- 23. Angular 2クライアント側アプリケーションでAPIキーを非表示/保護する方法は?
- 24. ハッシュしたくないデータをどのように保護しますか?
- 25. どのようにクライアント側のWebブラウザを検出しますか?
- 26. サーバーコントロールのクライアント側NAMEをどのように決定しますか?
- 27. セキュリティで保護されたクライアントGUIアプリケーションにはどのような技術をお勧めしますか?
- 28. クライアント側の処理のためのデータベースキーの保護
- 29. iosのローカルデータベースは保護されていますか?どのようにそれらを保護する?
- 30. Deviseでコントローラのアクションをどのように保護しますか?
[この質問を参照](http://stackoverflow.com/questions/10099843/how-secure-is-meteor/10099890) – pomber