Как безопасен Метеор?

132
13

Документы предлагают использовать Meteor.methods для создания безопасных методов.

Возможно ли, чтобы пользователь написал код в консоли браузера, который позволит пользователю обойти безопасность и отправить произвольные данные в базу данных сервера (MongoDB)? Если нет, почему бы и нет?

спросил(а) 2021-01-25T15:40:03+03:00 5 месяцев назад
1
Решение
78

Да, но только если метод не может проверить свои входы и контекст. К счастью, метеор предоставляет инструменты, чтобы сделать эту задачу довольно простой. Давайте рассмотрим примерный метод, который я использовал для ответа на этот вопрос. sendMessage - метод, который позволяет пользователю отправлять сообщение в чате:

Meteor.methods({
sendMessage: function(message, roomId) {
check(message, String);
check(roomId, String);

if (!this.user)
throw new Meteor.Error(401, 'You must be logged in.');

if (_.isEmpty(message))
throw new Meteor.Error(403, 'Message must not be empty.');

var room = Rooms.findOne(roomId);

if (!room)
throw new Meteor.Error(404, 'Room not found.');

if (!_.contains(room.members, this.userId))
throw new Meteor.Error(403, 'You are not in the room.');

return Messages.insert({
userId: this.userId,
roomId: roomId,
message: message
});
}
});

Вот подтверждения:

    Убедитесь, что входы имеют правильный тип, используя проверку (предотвращает инъекции). Убедитесь, что пользователь вошел в систему (см. Учетные записи api). Убедитесь, что сообщение хорошо сформировано. Убедитесь, что комната существует. Убедитесь, что текущий пользователь находится в комнате.

Сравните это с наивной реализацией sendMessage:

Meteor.methods({
sendMessage: function(message, roomId) {
return Messages.insert({
userId: this.userId,
roomId: roomId,
message: message
});
}
});

Здесь любой подключенный клиент может открыть терминал и начать вводить сообщения в любую комнату чата. Хуже того, message может быть объектом и вызвать всевозможные непреднамеренные последствия для других клиентов.

Нет бесплатного обеда с охраной - вы должны проверить все и принять худшее. Однако, если вы приложите усилия, вы можете создать высокозащищенные методы.

Я настоятельно рекомендую взглянуть на Эмили Старк. Метеор встречается с Мэллори, где она более подробно описывает эти моменты.

ответил(а) 2021-01-25T15:40:03+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема