2016-04-15 2 views
1

Я на самом деле создаю свое первое приложение, используя метеорит, в частности, используя угловой 2. У меня есть опыт с угловыми 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> 

Ok до сих пор. но мое беспокойство: в угловом 1 & 2 приложения компонент или контроллер или директива работает на стороне клиента, а не на стороне сервера.

Я установил свой html, чтобы показать имя клиента. но поскольку это рендеринг ah html, возможно, с некоторым умением довольно легко вставить некоторый код в HTML-рендеринг на угловом, чтобы отображать все мои поля.

Или может быть легко перейти на консоль и ввести некоторые команды для отображения всего объекта из коллекции базы данных.

Итак, мой вопрос: насколько безопасен метеор в этом смысле? Верны ли мои проблемы? Метеор способен защищать мои данные, защищать имена коллекций? Я знаю, что я могу указать в find(), чтобы не принести мне эти конфиденциальные данные, но так как find() может работать не на стороне сервера, его можно легко модифицировать «на лету», нет?

В любом случае ... Я по достоинству оценю, как метеорит безопасен (или нет) в этом смысле.

ty!

+1

Это большая тема. Я бы рекомендовал прочитать раздел [security] (http://guide.meteor.com/security.html) руководства. –

+2

Вообще говоря, вы не должны отправлять данные, к которым у них нет доступа, поэтому если они злонамерены, они видят только данные, которые там можно увидеть. Ваш клиент не защищен никогда, поэтому не доверяйте ему, чтобы не выставлять данные, выполнять проверку и т. Д. – ste2425

+0

Да, но имейте в виду: у вас есть клиент.find(), работающий на стороне клиента ... Я могу поставить что-то вроде client.find (только поля, которые я желаю) ... это нормально ... но так как команда find() будет работать на стороне клиента, легко будет кому угодно выполнить что-то вроде client.find (все, включая чувствительные данные). Очень легко выполнить команды direct 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 
    }); 
}); 

Этот пример только публикует name и address поля, вошедшего в клиентах пользователей, но не их password или fullCreditCardNumber.

Другим хорошим примером является коллекция Meteor.users. На сервере он содержит все пользовательские данные, учетные данные для входа, профили и т. Д. Для всех пользователей. Но он также доступен на стороне клиента. Meteor делает две важных вещи, чтобы защитить эту очень чувствительную коллекцию:

  • По умолчанию он издает только один документ:. Пользователь, который регистрируется в случае, если вы набираете Meteor.users.find().fetch() в консоль браузера, вы увидите только вошедшего в пользовательских данных, и на стороне клиента нет возможности получить всю коллекцию MongoDB users.Правильный способ сделать это - ограничить количество опубликованных документов в вашей функции Meteor.publish. См. Мой пример выше, или 10.9 в Meteor publish and subscribe tutorial.

  • Не весь документ пользователя публикуется. Например, учетные данные аутентификации OAuth и хэши паролей не являются, вы не найдете их в клиентской коллекции. Вы всегда можете выбрать, какая часть документа будет опубликована, простой способ сделать это - использовать MongoDB projections, как в приведенном выше примере.

+0

Привет @aedm! ty !! Я прочитал много статей о коллекции пользователей. Но могу ли я сделать то же самое с использованием разных коллекций или просто применим к коллекциям пользователей? –

+0

Да, вы можете применять одни и те же методы ко всем вашим коллекциям и защищать их так же хорошо. – aedm