Какие механизмы безопасности есть в Meteor? [закрыто]

92

Все мы знаем, что Meteor предлагает драйвер miniMongo, который без проблем позволяет клиенту получить доступ к постоянному уровню (MongoDB).

Если любой клиент может получить доступ к постоянному API, как защитить свое приложение?

Какие механизмы безопасности предоставляет Meteor и в каком контексте их следует использовать?

Оливье Рефало
источник
6
Мне нравится, что этот вопрос уже решается, но они действительно должны были упомянуть об этом в видео. Я думаю, что почти любой веб-разработчик, наблюдающий за этим, будет думать об этом вопросе в течение 10 секунд до его конца, и просто будет раздражен тем, что для такого потрясающего продукта они, ПОКАЗАНИЯ, полностью игнорируют очевидную проблему безопасности.
Naatan
6
В Meteor 0.5.0 добавлена ​​аутентификация пользователя meteor.com/blog/2012/10/17/…
hipertracker
Вы можете немного переформулировать это, чтобы снова открыть его. Возможно, «Какие меры безопасности мне следует предпринять?» или "Какие варианты безопасности доступны?"
joeytwiddle
1
Основанное на мнении? Wat? Я подумал, что это был повторный аудит, поскольку он явно не основан на мнениях.
bjb568
Я вроде как согласен, решение, основанное на мнении, вырвано из контекста - ответы основаны на реальных фактах.
Оливье Рефало

Ответы:

64

Когда вы создаете приложение с помощью команды meteor, по умолчанию оно включает следующие пакеты:

  • АВТОНОМЕР
  • БЕЗОПАСНЫЙ

Вместе они имитируют эффект от каждого клиента, имеющего полный доступ для чтения / записи к базе данных сервера. Это полезные инструменты для создания прототипов (только для целей разработки), но обычно не подходят для производственных приложений. Когда вы будете готовы к производственному выпуску, просто удалите эти пакеты.

Чтобы добавить больше, Meteor поддерживает пакеты Facebook / Twitter / и Much More для обработки аутентификации, и самым крутым является пакет Accounts-UI.

Мурали Рамакришнан
источник
2
Правильно,
начиная с
5
По умолчанию небезопасен. Ой.
Иуда Габриэль Химанго
16
@JudahHimango небезопасен только для целей тестирования , и удалить эти два пакета, когда вы будете готовы к производству, очень просто meteor remove autopublish insecure.
BenjaminRH
1
А как насчет метеорных методов? Клиент может получить доступ к ним с консоли даже при небезопасном удалении, поскольку они выполняются на сервере. Как их обезопасить?
Матаня
2
@Matanya, но при использовании и выполнении их с консоли выдает access deniedошибку. Проверить это.
ajduke
35

В документах сборников говорится:

В настоящее время клиенту предоставляется полный доступ на запись к коллекции. Они могут выполнять произвольные команды обновления Mongo. Как только мы построим аутентификацию, вы сможете ограничить прямой доступ клиента для вставки, обновления и удаления. Мы также рассматриваем валидаторы и другие ORM-подобные функции.

напыщенный
источник
1
Также просмотрите эту ветку на Quora с ответом одного из разработчиков Meteor: quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…
dentarg
1
@jonathanKingston ссылка не работает, не могли бы вы обновить ее?
Карлос Барселона,
@CarlosBarcelona Срок действия домена истек, и статья была опубликована до обновлений безопасности в Meteor. Я думаю, будет справедливо сказать, что он устарел; поэтому я удалил комментарий, чтобы сэкономить время людей. Спасибо
jonathanKingston
5

Если вы говорите об ограничении клиента не использовать какой-либо из ваших неавторизованных API вставки / обновления / удаления, это возможно.

См. Их приложение todo по адресу https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

Кроме того, теперь они добавили встроенный модуль AUTH, который позволяет вам войти в систему и зарегистрироваться. Так что это безопасно. Что касается XSS, проверок, заголовков клиентов и т. Д.

но вы можете в любой момент преобразовать приложение Meteor в полностью работающее приложение nodejs, развернув его на node. Итак, если вы знаете, как защитить приложение nodejs, вы сможете защитить Meteor.

Хитеш Джоши
источник
1
Это полностью верно по состоянию на сентябрь 2012 г.
Оливье Рефало
2

Начиная с версии 0.6.4, в режиме разработки блоки is_client и is_server по-прежнему переходят в клиентскую систему. Я не могу сказать, будут ли они разделены при выключении режима разработки.

Однако, если это не так, хакер может получить представление о системе, просмотрев блоки кода if (Meteor.is_server). Это особенно беспокоит меня, особенно потому, что я заметил, что на данный момент я все еще не могу разделить Коллекции на отдельные файлы на клиенте и сервере.

Обновить

Дело в том, что не помещайте связанный с безопасностью код в блок is_server в каталог, не являющийся сервером (т. Е. Убедитесь, что он находится где-то в каталоге / server.

Я хотел увидеть, не сошел ли я с ума по поводу того, что не могу разделить клиентские и серверные Коллекции в клиентских и серверных каталогах. На самом деле проблем с этим нет.

Вот мой тест. Это простой пример модели публикации / подписки, которая, кажется, работает нормально. http://goo.gl/E1c56

DrM
источник
1
Решением было бы сохранить ваш код в папке / сервере - так он не будет отправлен клиенту.
Olivier Refalo 02
DrM, см. Docs.meteor.com/#structuringyourapp - конфиденциальный код не нужно доставлять клиенту
emgee 02
Попробуйте что-нибудь простое; создать коллекцию в файле сервера, затем создать такую ​​же коллекцию в файле клиента и рассказать мне, что происходит. Затем создайте корневой файл с объявлением коллекции, затем просто укажите на него ссылку в файле каталога сервера и клиента и расскажите мне, что происходит. Если вы не можете создать коллекцию, как я, как вы можете ссылаться на нее независимо? В конце концов, вам нужно, чтобы ссылка на коллекцию существовала в том же доступном клиентском файле и использовала is_server и is_client. Надеюсь, я ошибаюсь, но пока не понял, как и почему.
DrM 02
Хм, странно, тестирование вроде нормально,
обновлю
Ссылка представляет собой репо к простому коду, но, похоже, работает нормально, не знаю, какие странные ошибки были в прошлом или как я могу их воссоздать.
DrM 02