Подтвердить что ты не робот

Понимание "Не разрешено. Неверный код может обновлять документы только по идентификатору". Ошибка метеора

В Meteor 0.5.8 было внесено следующее изменение:

Вызов обновления и удаление функций сбора в ненадежном коде могут больше не использовать произвольные селектора. Вы должны указать один ID документа при вызове этих функций от клиента (кроме в методе заглушки).

Итак, теперь, если вы хотите направить произвольные обновления в db с клиентской консоли, вам нужно сделать что-то вроде:

People.update({_id:People.findOne({name:'Bob'})['_id']}, {$set:{lastName:'Johns'}});

Вместо:

People.update({name:'Bob'}, {$set:{lastName:'Johns'}});

Я думал, что эта проблема безопасности контролируется установкой функций Meteor.Collection.allow и .deny в сочетании с автоматическими и небезопасными пакетами. Мне понравилось иметь возможность взаимодействовать с db из консоли Chrome JavaScript.

Какова мотивация изменений в Meteor 0.5.8?

4b9b3361

Ответ 1

Из Метеорного блога:

Изменяет правила allow/deny

Начиная с 0.5.8, клиентский код, такой как обработчики событий, может обновлять или удалять только один документ за раз, указанный _id. Код метода может по-прежнему использовать произвольные селекторы Mongo для манипулирования любым количеством документов одновременно. Чтобы запускать сложные обновления из обработчика событий, просто определите метод с Meteor.methods и вызовите его из обработчика событий.

Это изменение значительно упрощает API-интерфейс allow/deny, поощряет лучшую структуру приложения, позволяет избежать потенциальной атаки DoS, в которой злоумышленник может заставить сервер выполнять большую работу, чтобы определить, разрешена ли операция, и устраняет проблему безопасности сообщается @jan-glx.

Чтобы обновить свой код, измените обработчики allow и deny на использование одного документа, а не массива документов. Это должно значительно упростить ваш код. Также проверьте, есть ли у вас какие-либо обновления или удаления вызовов в обработчиках событий, которые используют селекторы Mongo (это довольно редко), и если да, переместите их в методы. Подробнее см. В документах update и remove.

В принципе, с моей точки зрения, вы почти никогда не хотите, чтобы поведение могло обновлять и удалять произвольные наборы документов от клиента без каких-либо конкретных знаний (например, идентификатор документа).

Когда прототипирование, которое я предполагаю, это то, что вы делаете, я полагаю, что это может мешать, но если вы когда-нибудь захотите получить свой код в производство, я считаю, что плюсы перевешивают минусы. Это также сводится к объявлениям безопасности (allow и deny), которые легче указать после этого изменения.

Надеюсь, что вам была предоставлена ​​дополнительная информация.