Que etapas devo seguir para proteger minha chave de API do Google Maps?

94

Obtive uma chave de API do Google Maps para meu domínio.

Os exemplos fornecidos quando obtive minha chave mostram a chave incorporada nos parâmetros de solicitação, por exemplo:

<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>

Compreendo que o campo referrer nas solicitações deve corresponder ao meu domínio. É seguro tornar minha chave visível em tags de script e similares? Ou há outras etapas que devo tomar?

Brabster
fonte

Respostas:

90

Considerando que a chave deve ser incluída nas <script>tags de suas páginas HTML, para carregar os arquivos / dados JS dos servidores do Google, não há nada que você possa fazer:

  • você deve colocá-lo em seus arquivos HTML
  • cada um pode dar uma olhada nisso.

Ainda assim, realmente não importa: se alguém tentar usar essa chave em outro domínio que não o seu, receberá um alerta de Javascript - o que não é bom para os outros usuários.

Assim :

  • Não há nada que você possa fazer; é assim que funciona
  • E não há muito com que você deva se preocupar, eu diria.
Pascal MARTIN
fonte
5
Acho que você poderia usar um proxy em seu próprio site que usasse a chave para buscar o arquivo "real". Totalmente sem sentido, sim, mas acho que é possível.
Tim Sylvester
1
Achei que valia a pena verificar caso eu tivesse esquecido alguma coisa. Saudações a quem respondeu.
brabster 01 de
@Tim: não tenho certeza; Estou supondo o próprio código JS se checando o nome de domínio do site que exibe o mapa, e pareceria normal que ele o comparasse, de alguma forma, com uma informação incluída na chave - ainda assim, não tente. ;;; @Brabster: :-)
Pascal MARTIN
2
É importante, por exemplo, se queremos proteger o uso da largura de banda de nossa chave API. Verifique minha solução.
Ifan Iqbal
3
e se eu pegar a chave api para usar em meu próprio APP (windows / ios / android)? posso simular o referenciador e usar essa chave para meu próprio propósito às suas custas!
loki
21

Há uma configuração no console da API do Google que pode proteger o uso da largura de banda da API de ser usado por outro domínio / usuário. Você pode restringir e proteger isso usando referrer no console da API. A chave API rejeitará solicitações sem referenciadores que correspondam às suas restrições.

Aqui está a captura de tela do Google para a chave API que só pode ser usada pelo Google em seus dois domínios. insira a descrição da imagem aqui

Ifan Iqbal
fonte
3
e os usuários móveis?
Muhammad Umer
Para adicionar um pouco, os detalhes podem estar aqui developers.google.com/maps/…
SIslam
14

Embora esta pergunta tenha alguns anos, é muito boa. Pelo que entendi, expor as chaves de API, mesmo que sejam de domínio correspondente, ainda pode levar a abusos. Há uma postagem sobre Security Stack Exchange aqui que aborda isso com mais detalhes.

As etapas que você pode seguir para evitar um possível abuso foram publicadas pelo Google aqui:

Guia de práticas recomendadas para usar APIs com segurança: https://support.google.com/cloud/answer/6310037?hl=en

Embora eu recomende levar tudo isso em consideração, há uma abordagem que lidaria com o exemplo específico postado por Brabster e que seria armazenar a chave em uma variável de ambiente . Dessa forma, tudo o que você precisa fazer é substituir a chave por uma variável do lado do servidor que está armazenada em seu projeto. No entanto, certifique-se de não enviar o arquivo que armazena a chave para um repositório público.

bultitude
fonte
16
Também sinto que essa resposta não aborda a questão. A API de mapas requer JavaScript do lado do navegador, que sempre pode ser lido por qualquer pessoa que obtenha a página.
David van brink
-1

Você deve usar o lado posterior / servidor para proteger e manipular a chave. No meu caso, usei o lado do servidor Django f / w, que pode servir uma chamada ajax para obter a chave do script / db do servidor e, em seguida, passá-la para google api.

SKS
fonte
4
Se sua chave de API chegar ao navegador, ela pode ser recuperada por terceiros.
Moose on the Loose