Как ограничить размер данных на стороне сервера, которые пользователь может получить в Firebase?

Я рассказал об основах Firebase (http://szimek.github.io/presentation-firebase-intro) на нашей местной встрече и получил 2 интересных вопроса от аудитории.

Представьте, что у вас есть приложение, похожее на Twitter, с миллиардами твитов, и каждый имеет доступ к ним для чтения.

  1. Есть ли способ ограничить размер данных (на стороне сервера), которые пользователь может получить? Даже если у меня есть вызов tweetsRef.limit(10), пользователь может легко изменить его на tweetsRef.limit(10e9) и попытаться получить все твиты.

  2. Как запретить пользователям обновлять существующие записи (даже если они были созданы этим пользователем), но разрешить им удалять существующие записи (только если они были созданы этим пользователем)?


person szimek    schedule 07.11.2013    source источник
comment
Пожалуйста, задавайте по одному вопросу за раз на SO. Два разных вопроса затруднят оценку правильных или полезных ответов.   -  person Kato    schedule 07.11.2013


Ответы (1)


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

Что касается вашего второго вопроса, это зависит от того, как вы хотите обрабатывать удаление. Часто вы на самом деле не хотите, чтобы объект удалялся, поэтому вы можете просто предоставить создающему пользователю доступ на запись к атрибуту deleted. В качестве альтернативы, если вы хотите, чтобы они действительно удалили объект, убедитесь, что пользователь является создателем и что значение newData равно null.

Вот пример правила безопасности из комментария @Kato ниже (запись/удаление разрешено, обновления запрещены):

".write": "!data.exits() || !newData.exists()"
person hiattp    schedule 07.11.2013
comment
Это позволит удалять, но не обновлять: ".write": "!data.exits() || !newData.exists()" - person Kato; 07.11.2013
comment
Значит, нет способа ограничить размер данных, которые пользователь может получить на стороне Firebase? Похоже, что злоумышленникам должно быть относительно легко использовать все доступные передачи для определенных типов приложений (например, клона Twitter). - person szimek; 07.11.2013
comment
@Като разве это не было целью? - person hiattp; 07.11.2013
comment
Я думаю так. Просто усиливаю свой ответ. - person Kato; 07.11.2013
comment
Круто просто убедиться. - person hiattp; 07.11.2013