Firestore на мобильном устройстве: правила не применяются к кэшированным данным - PullRequest
0 голосов
/ 08 октября 2019

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

Однако доступ к любым данным, которые были извлечены ранее,не контролируется правилами на устройстве.

Представьте себе ситуацию, когда приложение переключает пользователей Firebase (выйдите из системы, затем войдите в систему с другим пользователем Firebase) или изменит любое другое свойство, на которое опирается управление доступом. Несмотря на то, что я получаю правильное отклонение при попытке обновить данные из удаленной базы данных, то, что кэшируется на устройстве, все еще доступно из-за отсутствия локального применения правил.

Это вызывает потенциальные проблемы с конфиденциальностью (данные изпредыдущий пользователь может просочиться к новому пользователю). Если приложение разработано правильно, тогда фильтрация на устройстве может минимизировать риск, но все делают ошибки. Например, вы выбираете все транзакции, которые доступны пользователю, на основе правила Firestore, которое проверяет поле в каждой транзакции по идентификатору пользователя. Когда пользователь изменился и данные были кэшированы, новый пользователь будет иметь доступ ко всем транзакциям в кэше, независимо от того, принадлежит он ему или ей. Вы можете возразить, что этот дизайн ошибочен, и, возможно, вы правы, но совершить такую ​​ошибку слишком просто.

Было бы лучше просто удалить все кэшированные данные, когда обстоятельства радикально изменятся, например, привремя выхода. Это возможно, вызвав метод Firestore.clearPersistence () , но есть большая загвоздка: вы должны перезапустить (холодный запуск) приложение, потому что, если вы сделали какой-либо доступ к БД, это не получится. Перезапуск приложения с нуля имеет много недостатков и может оказаться невозможным даже при любых обстоятельствах.

Пожалуйста, сообщите, если есть какой-либо лучший способ решения этой проблемы.

1 Ответ

1 голос
/ 09 октября 2019

Правила безопасности применяются только на сервере. Они не применяются на клиенте.

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

Если вы хотите, чтобы новый пользователь не мог видеть данные предыдущего пользователя, рассмотрите возможность использования им других профилей Android / iOS для подписив, что дает им целое отдельное рабочее пространство. Кроме того, очистка постоянной базы данных программно или вручную - действительно единственная другая опция.

...