2009-09-01 4 views
43

Otrzymałem klucz API Map Google dla mojej domeny.Co należy zrobić, aby chronić mój klucz interfejsu API Map Google?

Przykłady przewidziane kiedy uzyskuje mój klucz pokazać klucz osadzonych w parametrów żą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> 

Doceniam, że pole wywołującej w żądaniach musi dopasować swoją domenę, czy jest to bezpieczne, aby mój klucz widoczne w tagach skryptu i tym podobnych? Czy są jakieś inne kroki, które powinienem podjąć?

Odpowiedz

49

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

  • należy umieścić go w Pliki HTML
  • każdy może je obejrzeć.

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

Więc:

  • Nic nie można zrobić; tak to działa
  • I nie ma się czym martwić, powiedziałbym.
+3

Myślę, że możesz użyć serwera proxy na swojej własnej stronie, który użył klucza do pobrania "prawdziwego" pliku. Całkowicie bez sensu, tak, ale myślę, że to możliwe. –

+1

Wyliczyłem, że warto było sprawdzić, czy coś przeoczyłem. Pozdrawiam tych, którzy odpowiedzieli. – Brabster

+0

@Tim: nie jestem pewien; Zgaduję, że sam kod JS, jeśli naciśnie nazwę domeny witryny wyświetlającej mapę, i wydaje się normalne, że porównał ją, w pewien sposób, z informacją zawartą w kluczu - nadal nie próbuj. ;;; @Brabster: :-) –

3

Nie rozumiem, dlaczego miałbyś zawracać sobie głowę. Czy klucz nie jest ważny tylko w Twojej domenie? IIRC, jedyną zakodowaną w nim informacją jest twoja nazwa domeny, niezależnie od wszelkich informacji, które Google może dodać, takich jak czas wygenerowania.

7

Istnieje ustawienie konsoli Google API, które może zabezpieczyć wykorzystanie pasma interfejsu API przed użyciem z inną domeną/użytkownikiem. Możesz go ograniczyć i zabezpieczyć za pomocą strony odsyłającej w konsoli API. Klucz interfejsu API odrzuci żądania bez odwołań pasujących do twoich ograniczeń.

Oto zrzut ekranu z Google dla klucza API, który może być używany tylko przez Google w dwóch domenach. enter image description here

10

Chociaż to pytanie ma kilka lat, jest bardzo dobre. Jak rozumiem, ujawnianie kluczy API, nawet jeśli są one dopasowane do domeny, może nadal prowadzić do nadużyć. Tutaj znajduje się wpis na stronie Security Stack Exchange, który obejmuje to bardziej szczegółowo.

Kroki, które można podjąć, aby zapobiec ewentualnym nadużyciom zostały opublikowane przez Google tutaj:

Best Practice Guide bezpiecznie z wykorzystaniem interfejsów API: https://support.google.com/cloud/answer/6310037?hl=en

Choć polecam biorąc to wszystko na board, istnieje podejście, które dotyczyłoby konkretnego przykładu, który został wysłany przez Brabster i który jest do przechowywania klucza w zmiennej środowiskowej . W ten sposób wystarczy podstawić klucz do zmiennej po stronie serwera, która jest przechowywana w projekcie. Pamiętaj jednak, aby nie zatwierdzać pliku przechowującego klucz do publicznego repozytorium.

+0

A jak użyłbyś zmiennej środowiskowej na oryginalnym pytaniu (zwykły Javascript)? –

+0

Ponieważ zmienną środowiskową jest zmienna po stronie serwera, możesz użyć JavaScript, aby ustawić ją za pomocą node.js. Tutaj jest krótki tutorial dotyczący tej techniki: https://hackernoon.com/how-to-use-environment-variables-keep-your-secret-keys-safe-secure-8b1a7877d69c. Aby działało to z myślą o pierwotnym pytaniu, znacznik skryptu musiałby zostać wygenerowany dynamicznie lub żądanie wykonane w ramach funkcji. – rjbultitude

+0

Uważam również, że ta odpowiedź nie zawiera odpowiedzi na pytanie. Interfejs API map wymaga javascript po stronie przeglądarki, który jest zawsze czytelny dla każdego, kto pobiera stronę. –

1

Należy użyć strony zaplecza/serwera, aby chronić i obsługiwać klucz.W moim przypadku użyłem Django f/w stronie serwera, które może obsługiwać wywołanie ajax, aby uzyskać klucz ze skryptu serwera/db następnie przekazać go do google api.

Powiązane problemy