2016-04-15 46 views
1

我實際上是在使用流星來創建我的第一個應用程序,特別是使用角度2.我已經使用過Angular 1和2,所以基於它。我有一些問題的關注......流星 - 它有多安全?

讓我們想象一下這個場景......我的存儲數據有關MongoDB:

收藏:客戶

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

現在,我的流星客戶端文件夾,我「這已經... struncture

收集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(); 
    } 
} 

..和去年:HTML頁面來呈現它,但只顯示客戶的名稱:

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

好爲止。但我擔心的是:在應用程序中,組件或控制器或指令在客戶端而不是服務器端運行。

我設置我的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領域,但不是他們的passwordfullCreditCardNumber

另一個很好的例子是Meteor.users集合。在服務器上,它包含所有用戶的所有用戶數據,登錄憑證,配置文件等。但它也可以在客戶端訪問。流星做兩件重要的事情來保護這個非常敏感的集合:

  • 默認情況下,僅發佈一個文件:這是一個在登錄的用戶如果輸入Meteor.users.find().fetch()到瀏覽器控制檯,您只能看到當前登錄在用戶的數據中,並且客戶端無法獲取整個MongoDB集合。這樣做的正確方法是限制您的Meteor.publish函數中已發佈文檔的數量。看到我上面的例子,或在Meteor publish and subscribe tutorial 10.9。

  • 不是整個用戶文檔發佈。例如,OAuth登錄憑證和密碼哈希不是,您不會在客戶端集合中找到它們。您始終可以選擇發佈文檔的哪一部分,這樣做的一個簡單方法是使用MongoDB projections,如上例所示。

+0

嗨@aedm! ty!我閱讀了許多關於用戶收藏的文章。但是,我可以使用不同的集合來做同樣的事,還是隻適用於用戶集合? –

+0

是的,您可以將相同的技巧應用到您的所有藏品中,並保護它們。 – aedm