Meteor.userId является изменяемым

Скопируйте файл libmysql.dll из установочного каталога MySQL и вставьте его в каталог bin в каталоге Ruby. Вам может потребоваться загрузить zip-архив из http://dev.mysql.com/downloads/mysql/ , если в каталоге установки MySQL еще нет файла libmysql.dll.

22
задан Peter Mortensen 24 August 2013 в 20:37
поделиться

1 ответ

Это большой вопрос, потому что он показывает, как работает модель метеорной безопасности.

Здесь нет проблем с безопасностью, потому что Meteor никогда не доверяет клиентскому коду.

В Meteor, только сервер решает, к каким данным у каждого клиента есть доступ (см. Meteor.publish ) и какие данные может изменять каждый клиент (см. Meteor.allow ) , Когда клиент аутентифицируется на сервере, сервер сохраняет идентификатор пользователя. До тех пор, пока клиент не выйдет из системы, он предоставит этот идентификатор вашим Meteor.publish и Meteor.allow функциям на сервере как userId.

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

Вы можете попробовать это с помощью приложения безопасных вечеринок:

  1. Создайте приложение для вечеринок с $ meteor create --example parties
  2. Создайте учетную запись пользователя и дважды щелкните карту, чтобы создать вечеринка. Установите флажок, чтобы сделать его частной вечеринкой.
  3. Откройте консоль JavaScript и введите Meteor.userId(), чтобы получить идентификатор пользователя.
  4. Выйти. Вечеринка исчезнет с экрана, потому что сервер не опубликует ее какому-либо другому пользователю.
  5. Теперь зайдите в консоль и перезапишите Meteor.userId() новой функцией, которая возвращает желаемый идентификатор.

Итак, теперь вы подделали клиента, чтобы он думал, что это ваш пользователь. Но сервер знает лучше. На экране все еще не будет вечеринки, и вы не можете обновить коллекцию вечеринок, чтобы изменить информацию о вечеринке.

Фактически, совершенно безопасно установить идентификатор пользователя клиента на что угодно! Вы можете войти прямо в систему учетных записей и позвонить Meteor.default_connection.setUserId("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");. Попробуйте, и вы увидите, что кнопка входа в правом верхнем углу превращается в анимацию. Это потому, что клиент звонит Meteor.user(), чтобы показать адрес электронной почты зарегистрированного пользователя, которого вы только что установили. Но поскольку вы не вошли на сервер как этот пользователь, он не публикует никакой информации об этом пользователе, и вы просто получаете спинниг.

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

65
ответ дан Dan Dascalescu 24 August 2013 в 20:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: