Набор клиентов Firestore () и проверка схемы поля - PullRequest
1 голос
/ 06 мая 2020

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

Если я понимаю правила безопасности, это возможно кому:

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

Меня беспокоит то, что из-за характера запросов на стороне клиента опытный пользователь может использовать свою аутентификацию и некоторый клиентский код для .set () любого поля или карты / объекта с любым значением, которое они хотят, если правило безопасности не запрещает это. Похоже, я мог бы использовать очень сложные пользовательские функции для проверки полученных данных. Я также мог бы проверять каждое обновление и создавать через API облачных функций, но я пытаюсь использовать саму базу данных Firestore, когда это возможно.

Правильно ли я обеспокоен возможностью пользователей злоупотреблять своим .set ( ) возможности создания полей в авторизованных документах (т.е. документах с минимальными правилами userId)?

Существует ли общепринятый способ создания правил безопасности, предотвращающих злоупотребление клиентом документами, не имеющими настраиваемых функций, проверяющих схему?

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

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

Сравните эти два утверждения из вашего вопроса :

  1. «Я мог бы использовать очень сложные пользовательские функции для проверки полученных данных»
  2. «Я мог бы также проверять каждое обновление и создавать через API облачных функций»

В обоих случаях вы пишете собственный код, чтобы гарантировать, что данные, вводимые пользователем, действительны в соответствии с вашими бизнес-правилами. Поскольку эти правила c специфичны для вашего бизнеса, нет никакого способа запретить вам их писать. Единственная разница - это , где вы пишете эти бизнес-правила. Используя облачные функции, вы пишете проверки в обычном коде JavaScript в среде, с которой вы, возможно, уже знакомы. Используя правила безопасности, вы пишете проверки на языке c, зависящем от домена, который вам придется выучить.

Лично я предпочитаю писать свои бизнес-правила на языке правил безопасности Firestore на стороне сервера, а затем используйте облачные функции для реализации бизнеса logi c поверх этих проверенных данных.

1 голос
/ 06 мая 2020

Если вы беспокоитесь, что пользователь может просто перепроектировать ваше приложение и испортить ваш код, чтобы нанести вред вашей базе данных, тогда да, это возможно. У вас должен быть правильный набор правил. Говоря об обновлении данных в базе данных из приложения, постарайтесь, насколько это возможно, обновить ее с помощью облачных функций. Таким образом, вам может потребоваться предоставить вашим пользователям меньший доступ к базе данных напрямую.

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

И если нет сведений или вы чувствуете, что информация должна быть обновлена ​​напрямую в базе данных, измените свои правила на это: ".write": "$uid === auth.uid". Здесь $uid - имя родительского узла и может быть любым другим. Таким образом, пользователь может получить доступ только к своим данным, и даже если пользователь изменяет ваше приложение, он может нанести вред только своим данным. (У вас должен быть установлен правильный набор правил).

Вы можете проверить эту ссылку для большинства комбинаций правил.

И обязательно проверьте ответ, ссылка на который выше. Это может прояснить, как это в некоторой степени обезопасит вашу базу данных. Если вы можете представить какую-либо конкретную ситуацию, касающуюся вашего приложения, и хотите получить некоторую информацию о том, как устанавливать там правила, не стесняйтесь оставить комментарий: -)

...