7

Meteor.callユーザーがコレクションのinsert、update、removeメソッドを呼び出せないようにするという概念が、JavaScriptコンソールから引き続き呼び出すことができることに気付きました。

クライアントの例:

// client
...

Meteor.call('insertProduct', productInfo);

...

サーバー部分は次のとおりです。

// server
Meteor.methods({
    insertProduct: function( productInfo ){
       Product.insert(...);
    }
})

OK、JavaScript コンソールから直接 Product.insert() を呼び出すことができないことはわかっています。

しかし、もう少し試してみると、Meteor.call()開発者ツールのリソース タブからクライアントの JavaScript にあることがわかります。

これで、コンソールから呼び出して、のプロパティMeteor.callがどうあるべきかを推測できるようになりました。productInfo

では、どうすればこの最後の活動を防ぐことができるのでしょうか? Meteor.call仕事は十分にできていますか?または私は何か重要なものを逃していますか?

4

5 に答える 5

2

Meteor.call は、 と同様にグローバル関数window.alert()です。残念ながら、ユーザーが Meteor.call を呼び出すのを防ぐことはできません。ただし、データのスキーマと、ユーザーが送信する実際のデータを検証することはできます。プロジェクトでガベージ データが取得されないようにするために、https ://github.com/aldeed/meteor-simple-schema (流星パッケージ名として aldeed:simple-schema) をお勧めします。

于 2016-02-01T02:55:34.620 に答える
0

Meteor.callコンソールからブロックできないのと同様に、コンソールからブロックすることもできませんCollectionName.find().count()。これらは meteor のグローバル関数です。

ただし、メソッドを保護するために実行できる簡単な手順があります。

  1. aldeed:simple-schemaコレクションが受け入れることができるデータのタイプを設定するために使用します。これにより、コレクションが取る特定のキーとそのタイプ (文字列、ブール値、配列、オブジェクト、整数) を設定できます https://github.com/aldeed/meteor-simple-schema
  2. ログインしたユーザーのみがメソッドから更新できるようにします。または、グローバルな許可/拒否ルールを設定します。https://www.meteor.com/tutorials/blaze/security-with-methods && https://www.discovermeteor.com/blog/allow-deny-a-security-primer/
  3. パッケージを削除insecureし、autopublish

スキーマと許可/拒否の単純な組み合わせでうまくいくはずです。

于 2016-02-01T03:25:54.070 に答える