2016-05-27 14 views
166

W firebase Web-App guide Zjednoczone I powinien umieścić daną apiKey w moim HTML, aby zainicjować Firebase:Czy można bezpiecznie udostępnić publicznie Firebase apiKey?

// TODO: Replace with your project's customized code snippet 
<script src="https://www.gstatic.com/firebasejs/3.0.2/firebase.js"></script> 
<script> 
    // Initialize Firebase 
    var config = { 
    apiKey: '<your-api-key>', 
    authDomain: '<your-auth-domain>', 
    databaseURL: '<your-database-url>', 
    storageBucket: '<your-storage-bucket>' 
    }; 
    firebase.initializeApp(config); 
</script> 

Robiąc tak apiKey jest narażony na każdego odwiedzającego. Jaki jest cel tego klucza i czy naprawdę ma on być publiczny?

Odpowiedz

141

APiKey zasadniczo identyfikuje projekt Firebase na serwerach Google. Nie jest to ryzyko dla bezpieczeństwa, aby ktoś o tym wiedział. W rzeczywistości muszą je znać, aby mogły wchodzić w interakcję z projektem Firebase.

W tym sensie jest bardzo podobny do adresu URL bazy danych, z którego Firebase był wykorzystywany w przeszłości do identyfikacji back-end: https://<app-id>.firebaseio.com. Zobacz pytanie dotyczące tego, dlaczego nie jest to zagrożenie dla bezpieczeństwa: How to restrict Firebase data modification?, w tym użycie reguł bezpieczeństwa po stronie serwera Firebase, aby zapewnić, że tylko autoryzowani użytkownicy mogą uzyskać dostęp do usług backendu.

+2

Czyli oznacza to, że inne osoby będą w stanie uzyskać dostęp do wszystkich danych w mojej bazie danych bazy ogniowej? –

+0

Zobacz http://stackoverflow.com/questions/35418143/how-to-restrict-firebase-data-modification –

+7

@EmmanuelCampos Odpowiedź brzmi Tak i Nie. Tak, jeśli pozwolisz lub chcesz, aby inne osoby miały dostęp do wszystkich danych w baza danych. I Nie, jeśli ich nie chcesz. Baza danych Firebase zawiera reguły, reguły, które kontrolujesz – Rexford

25

Opierając się na odpowiedziach prufrofro i Franka van Puffelena here, stworzyłem to rozwiązanie, które nie zapobiega skrobaniu, ale może utrudnić korzystanie z klucza API.

Ostrzeżenie: Aby uzyskać dostęp do danych, nawet z tej metody, można na przykład po prostu otworzyć konsolę JS w Chrome i wpisz:

firebase.database().ref("/get/all/the/data").once("value", function (data) { 
    console.log(data.val()); 
}); 

tylko zasad bezpieczeństwa bazy danych mogą chronić swoje dane.

Niemniej jednak ograniczone mój produkcja API użycie klucza do mojej domeny tak:

  1. https://console.developers.google.com/apis
  2. Wybierz projekt Firebase
  3. Poświadczenia
  4. Pod klucze API, wybrać Klawisz przeglądarki. Powinno to wyglądać tak: „klucz Browser (Automatycznie utworzone przez Google Service)
  5. W „Zebrane wnioski z tych kierujących HTTP (strony internetowej)” dodaj adres URL aplikacji (exemple: projectname.firebaseapp.com/*)

Teraz aplikacja działa tylko na tej nazwie domeny. Stworzyłem więc kolejny klucz API, który będzie prywatny dla rozwoju lokalnego hosta.

  1. Kliknij Utwórz poświadczenia> Klucz API

ten nie jest ograniczony, więc upewnij się zachować prywatne.

Używam Webpacka do budowania mojej aplikacji produkcyjnej. Aby upewnić się, że nie publikuję omyłkowo nowego, nieskrępowanego klucza API, umieszczam go wewnątrz mojego telefonu index.html, tak jak normalnie robiłbyś to z kluczem API.Następnie, w moim pliku webpack.production.config.js, wymienić klucz za każdym razem index.html jest kopiowany do kompilacji produkcyjnej, tak:

plugins: [ 
    new CopyWebpackPlugin([ 
     { 
     transform: function(content, path) { 
      return content.toString().replace("###dev-key###", "###public-key###"); 
     }, 
     from: './index.html' 
     } 
    ]) 
    ] 

Domyślnie, jak wspomniano Emmanuel Campos Firebase only whitelists localhost and your Firebase hosting domain.

+0

Czy to działa dobrze? Czy myślisz, aby zrobić to samo dla aplikacji na Androida. Zastanawiam się, dlaczego Firebase nie obejmuje tego w sekcji bezpieczeństwa. – MScott

+1

Dotychczas nie miałem żadnych problemów, ale prawdopodobnie nie ma ataków ani – now

+2

. Nie jest to wspomniane w ich przewodniku, ponieważ nie ochroni cię przed zdrapaniem. Wszystko to gwarantuje, że ktoś inny nie może utworzyć aplikacji internetowej, która używa bazy ogniowej do odczytu (lub zapisu) danych, jeśli jest uruchamiana w normalnie dobrze zachowanej przeglądarce. – thoutbeckers

5

Nie jestem przekonany, aby udostępnić klientowi klucze bezpieczeństwa/konfiguracyjne. Nie nazwałbym tego bezpiecznym, nie dlatego, że ktoś może ukraść wszystkie poufne informacje od pierwszego dnia, ponieważ ktoś może wysuwać nadmierną prośbę i marnować twój przydział i sprawić, że jesteś winien firmie Google dużo pieniędzy.

Trzeba myśleć o wielu pojęć z ograniczeniem dostępu do ludzi nie gdzie nie powinno być, ataki DOS itp

bym bardziej preferują klienta najpierw trafi na serwer, nie można umieścić co kiedykolwiek z pierwszej ręki firewall, captcha, cloudflare, niestandardowe zabezpieczenia pomiędzy klientem a serwerem, albo między serwerem a firebase, a ty jesteś gotowy. Przynajmniej możesz najpierw zatrzymać podejrzaną aktywność, zanim dotrze do bazy ogniowej. Będziesz miał znacznie większą elastyczność.

Widzę tylko jeden dobry scenariusz użycia dla używania konfiguracji opartej na kliencie dla wewnętrznych zastosowań. Na przykład masz wewnętrzną domenę i jesteś prawie pewien, że osoby z zewnątrz nie mają do niej dostępu, więc możesz skonfigurować środowisko takie jak przeglądarka -> typ firebase.

-1

Możesz użyć zdalnej konfiguracji firebase, dzięki której będzie ona bezpieczna.

+0

Czy możesz wyjaśnić więcej? Jeśli im prawo zdalna konfiguracja jest dla platform mobilnych. Służą one do innego celu. W jaki sposób połączysz swoją aplikację z firebase? –

Powiązane problemy