12

ログインしてサイトの管理者を使用できるようにするために、1人または複数のユーザーだけがロールを必要としない非常に単純なアプリがあります。

次のように、管理テンプレートで簡単なチェックを行っています。

<template name="admin">
{{#if currentUser}}
{{loginButtons}}
  {{#if isUserAdmin}}
     show some stuff here...
  {{/if}}
{{ else }}
{{loginButtons}}
{{/if}}
</template>

次に、ヘルパーに次のものがあります。

Template.admin.isUserAdmin = function(){
  var adminEmail = Meteor.user().emails[0].address;
  if( adminEmail === "username@gmail.com"){
    return true;
  } else {
    return false;
    //add some logic for displaying error template.
  }
}

アプリを安全に保つにはこれで十分ですか、それとも他に何か必要ですか?

4

1 に答える 1

20

それでは十分じゃない。主なルールは、クライアントを決して信頼しないことです。クライアント コードの任意の部分を他のものに置き換えることができます。この場合、isUserAdmin関数を変更して、常に true を返すことができます。

安全のために、サーバー側に安全フィルターを配置する必要があります。

1) 管理者のみが変更できるデータの書き込み/削除権限を設定します。http://docs.meteor.com/#allowを参照してください

publish2) すべてのユーザーに表示するのではなく、管理者のみに表示する必要があるデータ (ユーザーの電子メール、製品の価格履歴、未公開の記事など) がある場合は、呼び出しで権限を確認してください。例えば:

Meteor.publish('unpublishedArticles', function() {
    if(!this.userId) return null;
    var user = Meteor.users.findOne(this.userId);
    if(user.admin) return Articles.find({published: false});
    return null;
});

publish繰り返しになりますが、subscribe呼び出しは簡単に改ざんされる可能性があるため、データをフィルター処理することが重要です。

3) また、電子メールをクライアント コードに直接埋め込むのは賢明ではありません。admin = true特権ユーザーをフィールドでマークする方が良い (そして後で使いやすくなる) 。

アプリを安全にするには、これらの手順で十分です。

于 2013-07-25T05:50:04.617 に答える