Как ограничить изменение данных Firebase?

93

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

Так что, если кто-то возьмет мой firebase uri (например, https://firebaseinstance.firebaseio.com), то разработайте его локально .

Затем смогут ли они создать другое приложение на моем экземпляре Firebase, зарегистрироваться и пройти аутентификацию, чтобы прочитать все данные моего приложения Firebase?

ротанг
источник

Ответы:

104

@ Франк ван Пуффелен,

Вы упомянули фишинговую атаку. На самом деле есть способ обезопасить это.

Если вы войдете в консоль GoogleAPI API Manager, у вас есть возможность заблокировать, от какого HTTP-реферера ваше приложение будет принимать запросы.

  1. посетите https://console.developers.google.com/apis
  2. Перейдите в свой проект firebase
  3. Перейти к учетным данным
  4. В разделе Ключи API выберите ключ браузера, связанный с вашим проектом firebase (он должен иметь тот же ключ, что и ключ API, который вы используете для инициализации приложения firebase).
  5. В разделе «Принимать запросы от этих HTTP-рефереров (веб-сайтов) просто добавьте URL-адрес вашего приложения.

Это должно позволить использовать ваше приложение только домену из белого списка.

Это также описано здесь, в контрольном списке запуска firebase: https://firebase.google.com/support/guides/launch-checklist

Возможно, документация по firebase может сделать это более заметным или автоматически заблокировать домен по умолчанию и потребовать от пользователей разрешения доступа?

пруфрофро
источник
2
когда я захожу в консоль Google API, я не вижу возможности заблокировать реферер HTTP. Снимок экрана будет полезен. ТНХ
Rattanak
Вы пробовали выполнить описанные выше действия? Это должно привести вас прямо туда. В целях безопасности снимать скриншот не буду. Не забудьте найти ключ браузера. удачи.
prufrofro
4
Как насчет использования firebase с гибридным мобильным приложением, используя фреймворк наподобие ionic, как может работать белый список? Какие-либо предложения?
Динана
1
@prufrofro Это нормально работает? Подумал сделать то же самое для Android-приложения. Интересно, почему Firebase не освещает это в разделе безопасности.
steliosf
2
@Anand Да, но Firebase не рассматривает это в документации. По умолчанию ключи являются общедоступными, и вы должны вручную ограничить их использование только в определенном имени пакета и сертификате приложения SHA-1. И мне было интересно, почему Firebase вообще не упоминает об этом. Есть подвох что ли?
steliosf
38

Тот факт, что кто-то знает ваш URL, не представляет угрозы для безопасности.

Например: у меня нет проблем с тем, чтобы сообщить вам, что мой банк размещает свой веб-сайт по адресу bankofamerica.com и использует там протокол HTTP. Если вы также не знаете учетные данные, которые я использую для доступа к этому сайту, знание URL-адреса не принесет вам никакой пользы.

Для защиты ваших данных ваша база данных должна быть защищена с помощью:

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

Все это описано в документации Firebase по безопасности и правилам , которую я настоятельно рекомендую.

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

Франк ван Пуффелен
источник
4
не совсем тот ответ, который я ищу. Позвольте мне спросить вас по-другому. Предположим, я дал вам этот URL-адрес своей базы данных https://tinderclone.firebaseio.com/и https://tinderclone.firebaseio.com/profiles.json. Это настоящая база данных firebase. Можете ли вы разработать на его основе приложение, создав форму регистрации и форму входа по электронной почте. Поскольку мое приложение позволяет любому регистрироваться по электронной почте, сможете ли вы прочитать все данные после регистрации? Я задам вам еще один вопрос позже. Спасибо
rattanak
4
Это зависит от того, как вы защищаете свою базу данных. Простое добавление ".read": falseне позволит никому увидеть данные. Вы, вероятно, захотите позволить немного больше, но все зависит от вашего варианта использования. Защита данных описана в документации Firebase по безопасности и правилам .
Франк ван Пуффелен
6

Что касается белого списка Auth для мобильных приложений, где доменное имя неприменимо, Firebase имеет

1) SHA1 fingerprintдля приложений Android и

2) App Store ID and Bundle ID and Team ID (if necessary)для ваших приложений iOS

который вам нужно будет настроить в консоли Firebase.

С этой защитой, поскольку проверка выполняется не только в том случае, если у кого-то есть действующий ключ API, домен аутентификации и т. Д., Но и из наших авторизованных приложений и domain name/HTTP referrer in caseиз Интернета .

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

Для получения дополнительной информации https://firebase.google.com/support/guides/launch-checklist.

Ананд
источник
Простите за незнание, я не очень хорошо разбираюсь в шифровании, но разве Sha1 не доступен через ваш apk? Разве люди не могут просто скопировать Sha1? Не понимаю, как это помогает. Я был бы очень рад получить доказательства обратного :)
cs guy
Да. Можно конечно получить sha1 из apk. Но это не то, что вы передаете в качестве параметра в firebase для проверки вашего вызова. Это занято firebase на уровне api-sdk (поверьте, из среды выполнения Android). Таким образом, вы не сможете отправить это в firebase в качестве параметра для имитации соединения.
Ананд
Использование только отпечатка SHA1 ничем не поможет защитить связь вашего приложения Android с Firebase. Сам SHA1 можно легко получить и скопировать, а соединение по-прежнему можно подделать, используя Firebase API вместо SDK. Сначала вы должны подтвердить свое приложение и использовать некоторую обфускацию кода, чтобы скрыть ключ.
ФЕВРАЛЬ АСА ПЕРДАНА,