[PYTHON] So verbergen Sie den Google Maps-API-Schlüssel vor HTML

Ich mache mir Sorgen um API-Schlüssel bei der Verwendung der Maps JavaScript-API

Obwohl Google auf der offiziellen Website sagt: "Betten Sie den API-Schlüssel nicht direkt in den Code ein", [Offizielles Beispiel] -a-google-map) Die Codierung lautet wie folgt und ** YOUR_API_KEY ** wird im HTML-Code angezeigt. Wenn Sie damit eine Webseite erstellen, veröffentlichen Sie den API-Schlüssel weltweit. Es ist, als würde man mit Frichin auf einer öffentlichen Straße spazieren gehen. Ist die offizielle Probe ein nackter König?

<script defer
  src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>

Im Google-Dokument [API-Schlüsseleinschränkungen anwenden] wird derzeit "HTTP" angegeben. Es heißt, dass Einschränkungen durch "Verweise (Websites)" wesentlich sind, aber dies allein ist äußerst unglücklich. Wie Sie alle wissen, kann der Name einer Webseite leicht gefälscht werden, indem Sie einen Webserver lokal erstellen und mit Hosts herumspielen ... (das mache ich nicht, nur für den Fall) Um zu vermeiden, dass Sie ohne Ihr Wissen belastet werden, [API-Nutzung einschränken] -2429778502 & rd = 1) ist implementiert, aber was ist, wenn jemand irgendwo den API-Schlüssel ohne Erlaubnis verwendet und 1 Million Mal darauf zugreift? Ich kann nachts nicht schlafen ...

Verstecken Sie den API-Schlüssel außer Sichtweite

Schließlich möchte ich den API-Schlüssel nicht in HTML veröffentlichen! !! Deshalb habe ich mich für CGI entschieden, um den API-Schlüssel im Server zu verbergen.

1. 1. Auf Umgebungsvariable setzen

Übergeben Sie den API-Schlüssel mit der festgelegten Umgebungsvariablen an CGI. In meiner Umgebung wird CGI mit nginx + fcgiwrap ausgeführt. Legen Sie es daher wie folgt am Ende der Datei /etc/nginx/fcgiwrap.conf fest.

fcgiwrap.conf


location /cgi-bin/ {
・ ・ ・ ・ ・ ・
    fastcgi_param GOOGLE_MAPS_API_KEY  YOUR_API_KEY; <=YOUR_API_Ersetzen Sie den SCHLÜSSEL durch Ihren eigenen Schlüssel
}

Die hier festgelegte Einstellungsmethode hängt von Ihrer Umgebung ab (Apache usw.). Stellen Sie sie daher entsprechend Ihrer eigenen Umgebung ein.

2. Bereiten Sie CGI vor

Ersetzen Sie als Richtlinie den Teil src =" https: // maps.googleapis.com / maps / api / js des offiziellen Beispiels durch CGI. Ich verwende Python in meiner Umgebung, also sieht es so aus.

getapijs.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import os
url = 'https://maps.googleapis.com/maps/api/js' #Offizielles Beispiel-HTML ist src=Ich habe in der URL gelesen
key = os.environ['GOOGLE_MAPS_API_KEY'] #Extrahieren Sie den in der Umgebungsvariablen enthaltenen API-Schlüssel
mysrc = url + "?key=" + key #API-Schlüssel mit URL verketten
response = requests.get(mysrc) #Besuchen Sie die Google Map-Website und bringen Sie src ein
print("'Content-Type': 'text/javascript; charset=UTF-8'") #Header, um zu HTML zurückzukehren
print("")
print(response.text)

Dieser Teil ist auch für jede Umgebung unterschiedlich. Schreiben Sie ihn daher bitte in Ihrer eigenen Sprache. Der Punkt ist, dass ** den API-Schlüssel aus der Umgebungsvariablen des Servers holen **, die URL angeben und Javascript von der Google-Site abrufen. Der Header-Teil sollte "Content-Type" sein: "text / javascript; charset = UTF-8".

3. 3. Rufen Sie CGI in Javascript window.onload auf

main.js


function initMap() {
    //Entspricht dem Inhalt der offiziellen Stichprobe
    // Initialize and add the map
    // The location of Uluru
    var uluru = {lat: -25.344, lng: 131.036};
    // The map, centered at Uluru
    var map = new google.maps.Map(document.getElementById('map'), {zoom: 4, center: uluru});
    // The marker, positioned at Uluru
    var marker = new google.maps.Marker({position: uluru, map: map});
}
window.onload = function() {
    //Schreiben Sie nach dem Anzeigen der Seite den Prozess, den Sie ausführen möchten. Dies ist der Punkt von hier!
    fetch("/cgi-bin/getapijs.py").then(res=>{
        //Führen Sie CGI aus und übergeben Sie als Nächstes nur den resultierenden TEXT
        return res.text();
    }).then(mytext => {
        //Führen Sie das empfangene Javascript mit EVAL aus.
        eval(mytext);
    }).then(() => {
        //Verarbeitung nach der Ausführung. Das offizielle Beispiel-HTML&callback=Der Teil, der aufgerufen wurde
        initMap();
    }).catch(() =>{
        //Bitte behandeln Sie Ihren Lieblingsfehler
    });
}

In HTML wird "

Recommended Posts

So verbergen Sie den Google Maps-API-Schlüssel vor HTML
So aktualisieren Sie Google Sheets von Python
[Rails] google maps api So posten und anzeigen Sie einschließlich Karteninformationen
So zeigen Sie eine Karte mit der Google Map API (Android) an
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
Verwendung der Google Cloud Translation API
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
So veröffentlichen Sie ein Ticket über die Shogun-API
So generieren Sie einen öffentlichen Schlüssel aus einem privaten SSH-Schlüssel
Vorgehensweise für die Ajax-Kommunikation von HTML zu JSON auf dem API-Server
So verwenden Sie Google Colaboratory
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Herstellen einer Verbindung zum Cloud Firestore über Google Cloud-Funktionen mit Python-Code
So bekommen Sie einen Ingenieur aus Ihren 30ern
[Rails] So zeigen Sie Google Map an
Wie man SWIG von waf benutzt
Wiederverwendung von Flaschen Wie schreibe ich HTML?
[Memo] Verwendung von Google MµG
Verwendung der Python-API von OpenPose
So starten Sie den Explorer über die WSL
So greifen Sie über Python auf Wikipedia zu
Wie benutzt man Bing Search API?
So konvertieren Sie von .mgz nach .nii.gz
[Python] Verwendung der Typetalk-API
Verwenden Sie die Google Analytics-API von Python
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Umgang mit OAuth2-Fehlern bei Verwendung von Google APIs aus Python
So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert
So bedienen Sie IOT-Haushaltsgeräte von Siri aus einfach durch API-Hacking
So erstellen Sie einen Klon aus Github
[Rails] Einführung in Google Analytics [Easy]
So konvertieren Sie das Format einfach aus Markdown
[Memo] Verwendung von BeautifulSoup4 (1) HTML anzeigen
Erklären von JavaScript der Google Maps Geocoding API
Verwendung von Google Test in C-Sprache
[TF] Verwendung von Tensorboard von Keras
Verwendung von Multi-Core aus der Sicht mehrerer Sprachen
So verwenden Sie Google Assistant unter Windows 10
Verwenden Sie die Google Cloud Vision-API von Python
So suchen Sie in Google Colaboratory nach Google Drive
Zugriff auf RDS von Lambda (Python)
So bedienen Sie Linux von der Konsole aus
So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle
So erstellen Sie ein Repository aus Medien
So greifen Sie von außen auf den Datenspeicher zu
Verwendung der Cloud Vision API von GCP
In Python von Markdown in HTML konvertieren
API-Erklärung zum Berühren von Mastodon aus Python
Stellen Sie von Python aus eine Verbindung zur Websocket-API von coincheck her
Holen Sie sich mit Python + Requests Benutzer, die zu Ihrer Organisation gehören, über die Garoon REST-API
So generieren Sie automatisch ein API-Dokument mit dem Django REST-Framework und POST vom Dokumentbildschirm
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python