Синглтоны также плохи, когда дело доходит до кластеризации. Потому что тогда у вас больше нет «одного синглтона» в вашем приложении.
Рассмотрим следующую ситуацию: как разработчик вам необходимо создать веб-приложение, которое обращается к базе данных. Чтобы гарантировать, что одновременные вызовы базы данных не конфликтуют друг с другом, вы создаете thread-save SingletonDao
:
public class SingletonDao {
// songleton's static variable and getInstance() method etc. omitted
public void writeXYZ(...){
synchronized(...){
// some database writing operations...
}
}
}
. Таким образом, вы уверены, что в вашем приложении существует только один синглтон, и вся база данных проходит через это один и только SingletonDao
. Теперь ваша рабочая среда выглядит следующим образом: [/g0]
До сих пор все в порядке.
Теперь подумайте, что вы хотите настроить несколько экземпляров своего веб-приложения в кластер. Теперь у вас есть что-то вроде этого:
[/g1]
Это звучит странно, но теперь у вас много синглтонов в вашем приложении. И это именно то, что не должно быть одноэлементным: иметь множество объектов. Это особенно плохо, если вы, как показано в этом примере, хотите сделать синхронизированные вызовы в базу данных.
Конечно, это пример плохого использования одноэлементного кода. Но сообщение этого примера: вы не можете полагаться на то, что в вашем приложении есть только один экземпляр singleton, особенно когда дело касается кластеризации.
Спасибо вам за это обсуждение. Тем не менее, я хотел добавить деталь.
@Frank van Puffelen,
Вы упомянули фишинг-атаку. На самом деле есть способ защитить это.
Если вы входите в консоль API-интерфейса googleAPIs, у вас есть возможность заблокировать, с какого HTTP-реферера ваше приложение будет принимать запрос.
Это должно позволить только домену с белым списком использовать ваше приложение.
Это также описано здесь в контрольном списке запуска firebase: https://firebase.google.com/support/guides/launch-checklist
Возможно, документация по firebase может сделать это более видимое или автоматически блокирует домен по умолчанию и требует, чтобы пользователи разрешали доступ?
Снова, спасибо большое!
Что касается белого списка для мобильных приложений, где доменное имя не применимо, 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
Тот факт, что кто-то знает ваш URL-адрес, не является угрозой безопасности.
Например: у меня нет проблем, говоря вам, что мой банк размещает свой веб-сайт на bankofamerica.com, и он говорит там протокол HTTP. Если вы также не знаете учетные данные, которые я использую для доступа к этому сайту, зная, что URL-адрес не подходит вам.
Чтобы защитить ваши данные, ваша база данных должна быть защищена с помощью:
Все это описано в документации Firebase, посвященной Security & amp; Правила , которые я настоятельно рекомендую.
. При использовании этих правил безопасности единственный способ, с помощью которого чужое приложение может получить доступ к данным в вашей базе данных, - это если они копируют функциональность вашего приложения, пользователи заходят в свое приложение вместо вашего и подписывают / читают / записывают в вашу базу данных; по сути, фишинг-атака. В этом случае в базе данных нет проблемы с безопасностью, хотя, вероятно, время для привлечения некоторых органов.
https://tinderclone.firebaseio.com/
и https://tinderclone.firebaseio.com/profiles.json
. Это настоящая база данных о бомбе. Можете ли вы разработать приложение, создав форму регистрации и форму для входа в систему с помощью электронной почты. Поскольку мое приложение позволяет регистрироваться с помощью электронной почты после регистрации, сможете ли вы читать все данные? Я задам еще один вопрос. благодаря
– rattanak
16 February 2016 в 08:25
".read": false
не позволит кому-либо увидеть данные. Вероятно, вы захотите разрешить немного больше, но все зависит от вашего прецедента. Защита данных содержится в документации Firebase, посвященной Security & amp; Правила .
– Frank van Puffelen
16 February 2016 в 08:53