2017-05-02 1 views
0

私はSimpleSchema(node-simpl-schemaパッケージ)を同形の方法で使用しています。検証メッセージはクライアント上に表示され、meteor shellからも表示されます。SimpleSchemaで検証し、許可/拒否ルールを使用しないことは安全ではありませんか?

私の質問は、このセットアップが実際に安全かどうか、また許可/拒否ルールも書き込む必要があるかどうかです。例えば

SimpleSchema.setDefaultMessages 
    messages: 
    en: 
     "missing_user": "cant create a message with no author" 

MessagesSchema = new SimpleSchema({ 
    content: { 
    type: String, 
    label: "Message", 
    max: 200, 
    }, 
    author_id: { 
    type: String, 
    autoform: 
     defaultValue: -> 
     Meteor.userId() 
    custom: -> 
     if !Meteor.users.findOne(_id: @obj.author_id) 
     "missing_user" 
    }, 
    room_id: { 
    type: String, 
    } 
}, {tracker: Tracker}) 

meteor shellでは、私はそれをテストし、意図したとおりにそれが動作します。

> Messages.insert({content: "foo", author_id: "asd"}) 
/home/max/Desktop/project/meteor/two/.meteor/local/build/programs/server/packages/aldeed_collection2-core.js:501 
     throw error;                         // 440 
    ^
Error: cant create a message with no author 

許可/拒否ルールにこの検証ロジックを複製する必要がありますか?または、私が今やっているように、allow関数が常にtrueを返すようにすることはできますか?

答えて

0

私は、アプリケーションが安全である保証し、いくつかの非常に単純なルールがあります。

  1. がルールを許可/拒否を使用しないでください - すべてのクライアント側の書き込み要求を拒否。
  2. クライアントがデータベースに何かを書く必要がある場合は、Meteorメソッドを使用しなければなりません。
  3. 理想的には、Meteorメソッドは関数(共有コードまたはサーバー固有のコード)を呼び出し、これらの関数内で実行されるデータベース修飾子(Schemaを使用)の妥当性をチェックします。
  4. オプションで、クライアント側のメソッドを作成して、オブジェクトをクリーンアップし、サーバー側のメソッドを呼び出す前にスキーマを使用して独自の検証を実行することもできます。
+0

ご返信ありがとうございます。 > が MessagesSchema.validate私はそれが良いことを理解その後、偽 –

+0

Messages.allow 挿入:現在、私は、この最小限の許可機能を持っています設計パターンの観点から、許可/拒否の代わりにメソッドを使用します。しかし、もし私が単にSimpleSchemaを使うことができるのであれば、厳密に言えば方法も許可/拒否も必要ではありません。私はこれが実際にそうであるかどうか、あるいはサーバ上の 'SimpleSchema'ルールが何とかオーバーライドできるかどうかを知りたいと思います。 –

+0

(メッセージ) 真 キャッチeを試す - (userIdを、メッセージ、フィールド、修飾子): –

関連する問題