2013-07-25 9 views
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 === "[email protected]"){ 
    return true; 
    } else { 
    return false; 
    //add some logic for displaying error template. 
    } 
} 

は、セキュアアプリを保つために、この十分ですか私は必要なのですかそれ以外に何か?

答えて

20

これでは十分ではありません。第一のルールは、クライアントを信用しないことです。あなたのケースでは、クライアントコードの任意の部分を他のものに置き換えることができます。isUserAdmin関数は常にtrueになるように変更することができます。

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

1)管理者だけが変更を許可する必要があるデータの書き込み/削除のアクセス許可を設定します。あなただけなユーザーとして管理者(電子メール、製品の価格履歴、未発表記事など)に、すべてのユーザーに表示され権限をチェックすることを確認してはならないいくつかのデータを持っている場合)http://docs.meteor.com/#allow

2を参照してください。 publishに電話してください。たとえば:

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; 
}); 

ここでも、データを簡単に改ざんすることができpublishsubscribeとして呼び出しで濾過されることが重要です。

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

これらの手順は、アプリを安全にするために十分である必要があります。

+1

これは非常に良い提案です。関連するが異なる問題:ルーティングのために提案した原則をどのように適用するのか。それはクライアント側で行う必要があります。特定のユーザーにルートを制限する安全な方法がないことを意味しますか?私はMeteor.Routerのフィルターについて知っていますが、それらはクライアント側で定義されています。 – Curious2learn

+1

答えは600文字以上でしたので、ここであなたの質問をコピーすることができました:http://stackoverflow.com/questions/17874926/restrict-routes-in-meteor-js-to-privileged-users –

関連する問題