Чувствительные данные в базе данных Firebase [дубликат]

Синглтоны также плохи, когда дело доходит до кластеризации. Потому что тогда у вас больше нет «одного синглтона» в вашем приложении.

Рассмотрим следующую ситуацию: как разработчик вам необходимо создать веб-приложение, которое обращается к базе данных. Чтобы гарантировать, что одновременные вызовы базы данных не конфликтуют друг с другом, вы создаете thread-save SingletonDao:

public class SingletonDao {
    // songleton's static variable and getInstance() method etc. omitted
    public void writeXYZ(...){
        synchronized(...){
            // some database writing operations...
        }
    }
}

. Таким образом, вы уверены, что в вашем приложении существует только один синглтон, и вся база данных проходит через это один и только SingletonDao. Теперь ваша рабочая среда выглядит следующим образом: Single Singleton [/g0]

До сих пор все в порядке.

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

Many singletons [/g1]

Это звучит странно, но теперь у вас много синглтонов в вашем приложении. И это именно то, что не должно быть одноэлементным: иметь множество объектов. Это особенно плохо, если вы, как показано в этом примере, хотите сделать синхронизированные вызовы в базу данных.

Конечно, это пример плохого использования одноэлементного кода. Но сообщение этого примера: вы не можете полагаться на то, что в вашем приложении есть только один экземпляр singleton, особенно когда дело касается кластеризации.

53
задан rattanak 15 February 2016 в 23:48
поделиться

3 ответа

Спасибо вам за это обсуждение. Тем не менее, я хотел добавить деталь.

@Frank van Puffelen,

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

Если вы входите в консоль API-интерфейса googleAPIs, у вас есть возможность заблокировать, с какого 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 может сделать это более видимое или автоматически блокирует домен по умолчанию и требует, чтобы пользователи разрешали доступ?

Снова, спасибо большое!

54
ответ дан prufrofro 21 August 2018 в 18:51
поделиться
  • 1
    когда я иду на консоль Google API, я не вижу возможности блокировать HTTP-реферер. Скриншот будет полезен. спасибо – rattanak 13 August 2016 в 17:26
  • 2
    Вы пробовали следовать приведенным выше шагам? Он должен забрать вас прямо там. По соображениям безопасности я не собираюсь делать скринкап. Не забудьте найти ключ браузера. удачи. – prufrofro 15 August 2016 в 01:15
  • 3
    Как насчет использования firebase с гибридным мобильным приложением, используя фреймворк, такой как ионный, как работает белый листинг? Какие-либо предложения? – Dinana 15 September 2016 в 20:22
  • 4
    @prufrofro Это прекрасно работает для вас? Думал сделать то же самое для Android-приложения. Интересно, почему Firebase не охватывает это в разделе безопасности. – MScott 28 June 2017 в 01:18
  • 5
    @Anand Да, но Firebase не охватывает это в документации. По умолчанию ключи являются общедоступными, и вы должны ограничить их manully для использования только в определенном имени пакета и сертификате приложения SHA-1. И мне было интересно, почему Firebase не упоминает об этом вообще. Есть уловка или что-то еще? – MScott 9 December 2017 в 21:13

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

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

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

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

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

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

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

1
ответ дан Anand 21 August 2018 в 18:51
поделиться

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

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

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

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

Все это описано в документации Firebase, посвященной Security & amp; Правила , которые я настоятельно рекомендую.

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

26
ответ дан OctaviaLo 21 August 2018 в 18:51
поделиться
  • 1
    не совсем тот ответ, который я ищу. Позвольте мне спросить вас по-другому. Предположим, я дал вам этот url для моей firebase https://tinderclone.firebaseio.com/ и https://tinderclone.firebaseio.com/profiles.json. Это настоящая база данных о бомбе. Можете ли вы разработать приложение, создав форму регистрации и форму для входа в систему с помощью электронной почты. Поскольку мое приложение позволяет регистрироваться с помощью электронной почты после регистрации, сможете ли вы читать все данные? Я задам еще один вопрос. благодаря – rattanak 16 February 2016 в 08:25
  • 2
    Это зависит от того, как вы защищаете свою базу данных. Простое добавление ".read": false не позволит кому-либо увидеть данные. Вероятно, вы захотите разрешить немного больше, но все зависит от вашего прецедента. Защита данных содержится в документации Firebase, посвященной Security & amp; Правила . – Frank van Puffelen 16 February 2016 в 08:53