2016-04-15 17 views
1

私は実際に流星を使って、特に角度2を使って私の最初のアプリを作成しています。それに基づいて、角度1と2の経験があります。私は懸念のいくつかのポイントをしました...流星 - それはどれくらい安全ですか?

は私のデータは、MongoDBのに保存されている...のはこのシナリオを想像してみましょう:

コレクション:今すぐクライアント

{ 
name : "Happy client", 
password : "Something non encrypted", 
fullCrediCardNumber : "0000 0000 0000 0000" 
} 

、私の流星クライアントフォルダに、I 「このstruncture VEの...

コレクションclients.ts(サーバーフォルダ)

export var Clients = new Mongo.Collection('clients'); 

コmponentのclient.ts(いないサーバーフォルダ)最後のための

import {Clients} from '../collections/clients.ts'; 

class MyClients { 
clients: Array<Object>; 
constructor(zone: NgZone) { 
    this.clients = Clients.find(); 
    } 
} 

..and:htmlページをレンダリングするが、ちょうど顧客の名前を表示:これまで

<li *ngFor="#item of clients"> 
    {{client.name}} 
</li> 

[OK]を。私の懸念事項は次のとおりです。角度1 & 2つのアプリケーションでは、コンポーネントまたはコントローラまたはディレクティブはサーバー側ではなくクライアント側で実行されます。

クライアントの名前を表示するためにHTMLを設定しました。しかし、それはああhtmlのレンダリング、おそらくいくつかのスキルを持つ非常に簡単にすべての自分のフィールドを表示する角度でHTMLレンダリングにいくつかのコードを注入することです。

また、コンソールに移動して、データベースコレクションからオブジェクト全体を表示するコマンドを入力するのも簡単です。

だから、私の質問です:この意味で安全な流星はいかにですか?私の懸念は正しいですか?流星は私のデータを保護し、コレクションの名前を保護する能力がありますか?私は、find()でそのような機密データを取得しないように指定することができますが、find()はサーバー側で実行されていない可能性があるので、即座に変更するのは簡単でしょうか?

とにかく...この意味での流星がいかに安全かどうかについての説明を感謝します。

ty!

+1

これは大きなトピックです。このガイドの[security](http://guide.meteor.com/security.html)セクションを読むことをお勧めします。 –

+2

一般的に言えば(非常に一般的に)、彼らは悪意を持っていても見えるだけのデータしか見ることができないように、アクセス権がないデータを送信すべきではありません。クライアントは安全ではありませんので、データを公開しないように信頼しないでください。 – ste2425

+0

念頭に置いておきますが、クライアント側で実行されているclient.find()があります。 client.findのようなもの(私が望むフィールドのみ)...それは大丈夫ですが、find()コマンドはクライアント側で実行されるので、client.findのようなものを誰にでも簡単に実行できますデータ) - クライアント側から直接find()MongoDBコマンドを実行するのが非常に簡単です。私の理論が正しいかどうかを調べようとしています。 –

答えて

2

サーバー側の機密データを公開しないだけでデータを保護することができます。

Meteor.publish("my-clients", function() { 
    return Clients.find({ 
    contractorId: this.userId // Publish only the current user's clients 
    }, { 
    name: 1, // Publish only the fields you want the browser to know of 
    phoneNumber: 1 
    }); 
}); 

この例は、現在のユーザーのクライアントログインのnameaddressフィールドを公開していますが、ではない彼らのpasswordまたはfullCreditCardNumber

もう1つの良い例は、Meteor.usersコレクションです。サーバーには、すべてのユーザーのすべてのユーザーデータ、ログイン資格情報、プロファイルなどが格納されています。しかし、クライアント側でもアクセス可能です。それは1つのドキュメントのみ公開するデフォルトでは

  • :流星は、この非常に敏感なコレクションを保護するための2つの重要なことを行います。ログインしているユーザーがブラウザのコンソールにMeteor.users.find().fetch()を入力すると、あなただけの現在ログオンが表示されますユーザーのデータでは、MongoDB usersコレクション全体を取得する方法はクライアント側にありません。これを行う正しい方法は、Meteor.publish機能で公開された文書の量を制限することです。上記の私の例、またはMeteor publish and subscribe tutorialの10.9を参照してください。

  • ユーザー文書全体が公開されるわけではありません。たとえば、OAuthログイン資格情報とパスワードハッシュはそうではなく、クライアント側のコレクションでは見つからないでしょう。上記の例のように、ドキュメントのどの部分が公開されるかをいつでも選択できます。簡単な方法はMongoDB projectionsを使用しています。

+0

こんにちは@aedm!タイ!私はユーザーコレクションに関する多くの記事を読んでいます。しかし、私は別のコレクションを使用して同じことをすることができますか、それとも単にユーザーコレクションに適用されますか? –

+0

はい、同じテクニックをすべてのコレクションに適用して、同様に保護することができます。 – aedm

関連する問題