Які механізми безпеки має Метеор? [зачинено]


92

Ми всі знаємо, що Meteor пропонує драйвер miniMongo, який безперешкодно дозволяє клієнту отримати доступ до стійкого шару (MongoDB).

Якщо будь-який клієнт може отримати доступ до постійного API, як захистити свою програму?

Які механізми безпеки забезпечує Meteor і в якому контексті їх слід використовувати?


6
Мені подобається, що це вже розглядається, але вони справді мали б про це згадати у відео. Я думаю, що майже будь-який веб-розробник, який переглядає його, матиме на увазі це питання вже через 10 секунд до його закінчення, і просто роздратований тим, що для такого приголомшливого продукту ВИДАЮТЬ, що повністю ігнорують очевидну проблему безпеки.
Naatan

6
Meteor 0.5.0 додав аутентифікацію користувача meteor.com/blog/2012/10/17/…
hipertracker

Ви можете трохи переформулювати це, щоб його знову відкрили. Можливо, "Які заходи безпеки мені вжити?" або "Які варіанти безпеки доступні?"
joeytwiddle

1
На основі думки? Ват? Я вважаю, що це був повторний аудит, оскільки він, очевидно, не ґрунтується на думках.
bjb568

Я якось погоджуюсь, рішення, засноване на думці, виходить за рамки контексту - відповіді базуються на правдивих фактах.
Олів'є Рефало

Відповіді:


64

Коли ви створюєте додаток за допомогою команди meteor, за замовчуванням додаток включає такі пакети:

  • АВТОПУБЛІКАЦІЯ
  • СТРАХУВАННЯ

Разом вони імітують ефект кожного клієнта, що має повний доступ для читання / запису до бази даних сервера. Це корисні засоби створення прототипів (лише з метою розробки), але, як правило, не підходять для виробничих застосувань. Коли будете готові до випуску, просто видаліть ці пакети.

Щоб додати більше, Meteor підтримує пакети Facebook / Twitter / та значно більше для обробки автентифікації, а найкрутішим є пакет Accounts-UI


2
Правильно станом на метеор 0,5
Олів'є Рефало

5
За замовчуванням небезпечний. Так
Джуда Габріель Хіманго

16
@JudahHimango небезпечний лише для тестування , і видалити ці два пакети, коли ви готові до виробництва, так само просто meteor remove autopublish insecure.
BenjaminRH

1
А як щодо метеорних методів? Клієнт може отримати доступ до них із консолі навіть із незахищеним видаленням, оскільки вони запускаються на сервері. Як можна зробити їх безпечними?
Матанія

2
@Matanya, але при використанні та виконанні цих з консолі це викличе access deniedпомилку. Перевір.
ajduke

35

У колекціях doc сказано:

В даний час клієнту надається повний доступ до колекції для запису. Вони можуть виконувати довільні команди оновлення Mongo. Після того, як ми побудуємо автентифікацію, ви зможете обмежити прямий доступ клієнта для вставки, оновлення та видалення. Ми також розглядаємо валідатори та інші ORM-подібні функціональні можливості.


1
Також перегляньте цю тему на Quora з відповіддю одного з розробників Meteor: quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…
dentarg

1
@jonathanKingston посилання порушено, чи не могли б ви оновити його, будь ласка?
Карлос Барселона,

@CarlosBarcelona Термін дії домену закінчився, і стаття була до оновлення безпеки в Meteor. Я думаю, чесно сказати, що це було застарілим; тому я видалив коментар, щоб заощадити час. Дякую
jonathanKingston

5

Якщо ви говорите про обмеження клієнта не використовувати будь-який ваш несанкціонований API вставлення / оновлення / видалення, це можливо.

Подивіться їх додаток, що працює на https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

Крім того, тепер вони додали вбудований модуль AUTH, який дозволяє входити та реєструватися. Тож безпечно. Наскільки ви дбаєте про XSS, Valiations, заголовки клієнтів тощо.

але ви можете будь-коли перетворити метеорну програму на повністю робочу програму nodejs, розгорнувши на node. Отже, якщо ви знаєте, як захистити додаток nodejs, ви повинні мати можливість захистити метеор.


1
Це повністю вірно станом на вересень 2012 року
Олів’є Рефало,

2

Станом на 0.6.4, в режимі розробки блоки is_client та is_server все одно переходять до клієнтської системи. Я не можу сказати, чи вони розділені, коли ви вимикаєте режим розробки.

Однак, якщо це не так, хакер може отримати інформацію про систему, переглянувши блоки коду if (Meteor.is_server). Це мене особливо турбує, особливо тому, що я зазначив, що досі не можу розділити колекції на окремі файли на клієнті та сервері.

Оновлення

Ну, справа не в тому, щоб не розміщувати пов'язаний з безпекою код у блоці is_server у несерверному каталозі (тобто - переконайтесь, що він знаходиться в чомусь під / сервером.

Я хотів побачити, чи просто я з глузду з’їжджаю, що не можу розділити колекції клієнтів та серверів у каталогах клієнта та сервера. Насправді з цим проблем немає.

Ось мій тест. Це простий приклад моделі публікації / передплати, яка, здається, працює нормально. http://goo.gl/E1c56


1
Рішенням було б зберегти ваш код на сервері / папці - таким чином, він не надсилається клієнту.
Олів'є Рефало

DrM, будь ласка, див. Docs.meteor.com/#structuringyourapp - конфіденційний код не потрібно доставляти клієнту
emgee

Спробуйте щось просте; створіть колекцію у файлі сервера, потім створіть цю саму колекцію у клієнтському файлі та скажіть мені, що відбувається. Далі створіть кореневий файл із декларацією колекції, а потім просто посилайтеся на нього у файлі каталогу сервера та клієнта та повідомте мені, що відбувається. Якщо ви не можете створити колекцію, як я не міг, як ви можете посилатися на них самостійно? Врешті-решт, вам потрібно, щоб посилання на колекцію існувало в тому самому доступному клієнтському файлі та використовувало is_server та is_client. Сподіваюсь, я помиляюся, але поки що не з’ясував, як і чому.
DrM

Хм, дивно, протестування, здається, добре, оновить відповідь
DrM

Посилання - це репо до простого коду, але, схоже, працює нормально, не впевнений, які дивні помилки були в минулому або як я можу їх відтворити.
DrM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.