Jakie kroki należy podjąć, aby chronić mój klucz interfejsu API Map Google?

98

Otrzymałem klucz API Map Google dla mojej domeny.

Przykłady podane, gdy otrzymałem mój klucz, pokazują klucz osadzony w parametrach żądania, na przykład:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=my-key" type="text/javascript"></script>

Rozumiem, że pole strony odsyłającej w żądaniach musi być zgodne z moją domeną. Czy można bezpiecznie pokazać mój klucz w tagach skryptów i tym podobnych? Czy są jakieś inne kroki, które powinienem podjąć?

brabster
źródło

Odpowiedzi:

92

Biorąc pod uwagę, że klucz musi być zawarty w <script>tagach Twoich stron HTML, aby załadować pliki / dane JS z serwerów Google, nic nie możesz zrobić:

  • musisz umieścić go w swoich plikach HTML
  • każdy może na nie spojrzeć.

Mimo to nie ma to znaczenia: jeśli ktoś spróbuje użyć tego klucza w innej domenie niż Twoja, otrzyma alert Javascript - co nie jest przyjemne dla innych użytkowników.

Więc :

  • Nic nie możesz zrobić; tak to działa
  • I nie ma się czym martwić, powiedziałbym.
Pascal MARTIN
źródło
5
Myślę, że możesz użyć serwera proxy we własnej witrynie, który użyłby klucza do pobrania „prawdziwego” pliku. Całkowicie bezcelowe, tak, ale myślę, że to możliwe.
Tim Sylvester
1
Pomyślałem, że warto sprawdzić, czy coś przeoczyłem. Pozdrawiam tych, którzy odpowiedzieli.
brabster
@Tim: nie jestem pewien; Domyślam się, że sam kod JS, jeśli wybrałbym nazwę domeny witryny wyświetlającej mapę, i wydawałoby się normalne, że porównał ją w jakiś sposób z informacją zawartą w kluczu - mimo wszystko tak nie próbuj. ;;; @Brabster: :-)
Pascal MARTIN
2
Ma to na przykład znaczenie, jeśli chcemy chronić pasmo wykorzystania naszego klucza API. Sprawdź moje rozwiązanie.
Ifan Iqbal
3
a co, jeśli wezmę klucz API do użycia we własnej aplikacji (windows / ios / android)? mogę zasymulować stronę odsyłającą i użyć tego klucza do własnych celów na twój koszt!
loki
21

W konsoli Google API jest ustawienie, które może chronić przepustowość Twojego interfejsu API przed użyciem przez inną domenę / użytkownika. Możesz to ograniczyć i zabezpieczyć, używając strony odsyłającej w konsoli API. Klucz API odrzuca żądania bez stron odsyłających, które pasują do twoich ograniczeń.

Oto zrzut ekranu z Google dla klucza API, który może być używany tylko przez Google z dwóch domen. wprowadź opis obrazu tutaj

Ifan Iqbal
źródło
3
co z użytkownikami mobilnymi?
Muhammad Umer,
Aby dodać trochę, szczegóły można znaleźć tutaj developers.google.com/maps/ ...
SIslam
15

Chociaż to pytanie ma już kilka lat, jest bardzo dobre. Jak rozumiem, ujawnienie kluczy API, nawet jeśli są dopasowane do domeny, może nadal prowadzić do nadużyć. Jest tutaj post na Security Stack Exchange , który omawia to bardziej szczegółowo.

Kroki, które możesz podjąć, aby uniknąć potencjalnych nadużyć, zostały opublikowane przez Google tutaj:

Przewodnik po sprawdzonych metodach bezpiecznego korzystania z interfejsów API: https://support.google.com/cloud/answer/6310037?hl=en

Chociaż zalecałbym wzięcie tego wszystkiego na pokład, istnieje podejście, które poradzi sobie z konkretnym przykładem opublikowanym przez Brabstera, a jest nim przechowywanie klucza w zmiennej środowiskowej . W ten sposób wszystko, co musisz zrobić, to podstawić klucz do zmiennej po stronie serwera, która jest przechowywana w projekcie. Jednak pamiętaj, aby nie zatwierdzać pliku, który przechowuje klucz, w publicznym repozytorium.

rjbultitude
źródło
16
Czuję też, że ta odpowiedź nie odpowiada na pytanie. Interfejs API map wymaga języka JavaScript po stronie przeglądarki, który jest zawsze czytelny dla każdego, kto pobierze stronę.
david van brink
-1

Do ochrony i obsługi klucza należy używać zaplecza / strony serwera. W moim przypadku użyłem strony serwera Django f / w, która może obsłużyć wywołanie Ajax, aby uzyskać klucz ze skryptu serwera / db, a następnie przekazać go do Google API.

SKS
źródło
5
Jeśli Twój klucz API kiedykolwiek dotrze do przeglądarki, może zostać pobrany przez stronę trzecią.
Moose on the Loose