Jak ograniczyć modyfikację danych Firebase?

93

Firebase zapewnia zaplecze bazy danych, dzięki czemu programiści mogą skupić się na kodzie po stronie klienta.

Więc jeśli ktoś weźmie moje URI Firebase (na przykład https://firebaseinstance.firebaseio.com), to na nim napisz lokalnie .

Czy będą mogli wtedy utworzyć kolejną aplikację poza moją instancją Firebase, zarejestrować się i uwierzytelnić, aby odczytać wszystkie dane mojej aplikacji Firebase?

rattanak
źródło

Odpowiedzi:

104

@Frank van Puffelen,

Wspomniałeś o ataku phishingowym. Właściwie jest sposób, aby to zabezpieczyć.

Jeśli zalogujesz się do konsoli GoogleAPIs API Manager, masz możliwość zablokowania strony odsyłającej HTTP, od której Twoja aplikacja będzie akceptować żądania.

  1. odwiedź https://console.developers.google.com/apis
  2. Przejdź do projektu Firebase
  3. Przejdź do poświadczeń
  4. W sekcji Klucze API wybierz klucz przeglądarki powiązany z projektem Firebase (powinien mieć ten sam klucz, co klucz API, którego używasz do inicjowania aplikacji Firebase).
  5. W sekcji „Akceptuj żądania od tych stron odsyłających HTTP (witryn internetowych)” po prostu dodaj adres URL swojej aplikacji.

Powinno to pozwolić tylko domenie z białej listy na korzystanie z Twojej aplikacji.

Jest to również opisane tutaj na liście kontrolnej uruchamiania Firebase tutaj: https://firebase.google.com/support/guides/launch-checklist

Być może dokumentacja Firebase mogłaby uczynić to bardziej widocznym lub automatycznie zablokować domenę domyślnie i wymagać od użytkowników zezwolenia na dostęp?

prufrofro
źródło
2
kiedy wchodzę do konsoli Google API, nie widzę opcji blokowania strony odsyłającej HTTP. Zrzut ekranu będzie pomocny. thx
rattanak
Czy próbowałeś wykonać powyższe kroki? Powinien cię tam zabrać. Ze względów bezpieczeństwa nie zamierzam robić zrzutu ekranu. Pamiętaj, aby poszukać klucza przeglądarki. powodzenia.
prufrofro
4
A co w przypadku korzystania z Firebase z hybrydową aplikacją mobilną, przy użyciu frameworka takiego jak ionic, jak może działać biała lista? Jakieś sugestie?
Dinana
1
@prufrofro Czy to działa dobrze dla Ciebie? Myślałem o zrobieniu tego samego dla aplikacji na Androida. Zastanawiam się, dlaczego Firebase nie obejmuje tego w sekcji bezpieczeństwa.
steliosf
2
@Anand Tak, ale Firebase nie obejmuje tego w dokumentacji. Domyślnie klucze są publiczne i trzeba je ręcznie ograniczyć do użycia tylko w określonej nazwie pakietu i certyfikacie aplikacji SHA-1. Zastanawiałem się, dlaczego Firebase w ogóle o tym nie wspomina. Czy jest jakiś haczyk czy coś?
steliosf
38

Fakt, że ktoś zna Twój adres URL, nie stanowi zagrożenia dla bezpieczeństwa.

Na przykład: nie mam problemu z poinformowaniem Cię, że mój bank obsługuje swoją witrynę internetową pod adresem bankofamerica.com i używa tam protokołu HTTP. O ile nie znasz również danych uwierzytelniających, których używam, aby uzyskać dostęp do tej witryny, znajomość adresu URL nic ci nie da.

Aby zabezpieczyć swoje dane, Twoja baza danych powinna być chroniona:

  • reguły walidacji, które zapewniają, że wszystkie dane są zgodne z wybraną strukturą
  • zasady autoryzacji zapewniające, że każdy bit danych może być odczytywany i modyfikowany tylko przez upoważnionych użytkowników

Wszystko to jest omówione w dokumentacji Firebase dotyczącej bezpieczeństwa i reguł , którą bardzo polecam.

Dzięki tym regułom bezpieczeństwa aplikacja innej osoby może uzyskać dostęp do danych w Twojej bazie danych tylko wtedy, gdy skopiuje funkcjonalność Twojej aplikacji, poprosi użytkowników o zalogowanie się do swojej aplikacji zamiast do Twojej i zalogowanie się / odczyt / zapis twoja baza danych; zasadniczo jest to atak typu phishing. W takim przypadku nie ma problemu z bezpieczeństwem w bazie danych, chociaż prawdopodobnie nadszedł czas, aby zaangażować niektóre organy.

Frank van Puffelen
źródło
4
nie do końca odpowiedź, której szukam. Pozwól, że zapytam cię w inny sposób. Załóżmy, że podałem ci ten adres URL do mojej bazy Firebase https://tinderclone.firebaseio.com/i https://tinderclone.firebaseio.com/profiles.json. Są prawdziwą bazą danych Firebase. Czy możesz opracować aplikację poza tym, tworząc formularz rejestracyjny i formularz logowania za pomocą poczty elektronicznej. Ponieważ moja aplikacja umożliwia każdemu rejestrację za pomocą poczty e-mail, czy po rejestracji byłbyś w stanie odczytać wszystkie dane? Później zadam ci kolejne pytanie. Dzięki
rattanak
4
To zależy od tego, jak zabezpieczasz swoją bazę danych. Samo dodanie ".read": falseuniemożliwi nikomu zobaczenie danych. Prawdopodobnie chcesz pozwolić na nieco więcej, ale wszystko zależy od twojego przypadku użycia. Zabezpieczanie danych jest opisane w dokumentacji Firebase w sekcji Bezpieczeństwo i reguły .
Frank van Puffelen
6

Jeśli chodzi o białą listę autoryzacji dla aplikacji mobilnych, gdzie nazwa domeny nie ma zastosowania, Firebase tak

1) SHA1 fingerprintdla aplikacji na Androida i

2) App Store ID and Bundle ID and Team ID (if necessary)dla aplikacji na iOS

które będziesz musiał skonfigurować w konsoli Firebase.

Z tej ochrony, ponieważ walidacja jest nie tylko jeśli ktoś ma prawidłowy klucz API, Autentyczna domenę, etc, ale także, czy to pochodzące z naszych autoryzowanych aplikacji i domain name/HTTP referrer in caseod sieci .

Powiedział, że nie musimy się martwić, jeśli ten klucz API i inne parametry połączenia zostaną ujawnione innym.

Aby uzyskać więcej informacji, https://firebase.google.com/support/guides/launch-checklist

Anand
źródło
Przepraszam za moją ignorancję, nie jestem zbyt dobry w szyfrowaniu, ale czy Sha1 nie jest dostępny przez twój apk? Czy ludzie nie mogą po prostu skopiować Sha1? Nie wiem, jak to pomaga. Byłbym bardzo szczęśliwy, gdyby udowodniono mi inaczej :)
cs guy
Tak. Z pewnością możesz uzyskać sha1 apk. Ale to nie jest coś, co przekazujesz jako parametr do firebase w celu sprawdzenia poprawności połączenia. Jest pobierany przez firebase na poziomie api-sdk (wierzymy, że pochodzi ze środowiska uruchomieniowego Androida). Nie będziesz więc mógł wysłać tego do Firebase jako parametru do sfałszowania połączenia.
Anand
Używanie samego odcisku palca SHA1 nie pomoże w zabezpieczeniu komunikacji aplikacji na Androida z Firebase. Sam SHA1 można łatwo uzyskać i skopiować, a połączenie nadal można sfałszować za pomocą interfejsu Firebase API zamiast SDK. Najpierw powinieneś poświadczyć swoją aplikację i użyć zaciemnienia kodu, aby ukryć klucz.
FEBRYAN ASA PERDANA