Wie sichert Google Maps ihren API-Schlüssel? Wie macht man etwas Ähnliches?
Derzeit Google erfordert das erstellen eines API-Schlüssels, der spezifisch für die Domäne, wo die Karte aus bedient werden. Wie funktioniert Google durchsetzen? Ich möchte das gleiche zu tun.
Ich setze eine API für mein service, sondern möchten, dass clients zum einbetten Aufrufe der API über javascript und nicht nur vom server. Ich sichere es einfach mit einem zufälligen token, aber natürlich könnte dies problemlos manipuliert werden, indem alle, die sich auf den code auf dem client-Rechner.
Habe ich immer verstanden, dass dieses Konzept nicht möglich sein, aber irgendwie Google macht einen guten job bei der Durchsetzung es.
Bearbeiten - Es klingt wie Google wirklich noch nichts getan, erstaunlich, nachdem alle. Ihre API ist wahrscheinlich nur für tracking-und nicht wirklich garantieren, dass Ihre API verwendet wird, durch die person mit dem Schlüssel.
InformationsquelleAutor der Frage Vyrotek | 2010-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin ziemlich sicher, Sie verwenden die REFERER-URL, um festzustellen, wo der Anruf kommt. Wenn die domain nicht mit dem übereinstimmt, was zugeordnet ist, die Taste, es ist eine ungültige Anforderung.
Für ein praktisches Beispiel, mit Hilfe von PHP können Sie die domain mit
$_SERVER['HTTP_REFERER']
prüfen den referer. Wenn die Domäne entspricht, zurückzugeben eine gültige Antwort. Falls nicht, können Sie die Rückgabe einem 401 Unauthorized oder andere Antwort.InformationsquelleAutor der Antwort Trevor
Den API-Schlüssel selbst ist wahrscheinlich ein one-way-hash, der die Domäne, der der Schlüssel zugeordnet ist, und ein Geheimnis nur die Google-API-server kennt. Es enthält einige andere Stücke von bekannten (Google natürlich). Wenn Sie eine Anfrage aus, die domain, den API-server braucht die Domäne, von der die Anforderung kommt und macht das gleiche one-way-hash-Berechnung und vergleicht die beiden Werte.
Für Ajax-Aufrufe, die Sie wahrscheinlich verwenden Sie den referrer zu erhalten, die Domäne des Dokuments host. Während der referrer kann gefälscht werden, letztlich, um die API zu verwenden, benötigen Sie eine Google-javascript ausführen in das Dokument. An dieser Stelle, diese kann mit javascript überprüfen, dass zwar das Dokument, die aufgerufen wird, die Ajax-API-Aufruf stammt aus dem Ziel-server. Dies ist auch spoofable natürlich, vorausgesetzt, Sie haben Ihren eigenen DOM-Implementierung oder on-the-fly Modifikation des Skripts. Jedoch, dieses spoofing passieren muss, um auf der client-Seite und die Chancen, dass die website, die will benutzen Sie das Google API können spoofing der client-software sind Recht klein.
Beachten Sie, dass, da die API ist im wesentlichen frei, Sie hätten angeboten, den anonymen Zugriff auf Ihre API. Anscheinend ist Google ' s Absicht nicht ist, zu schützen, unberechtigten Zugriff, sondern um sicherzustellen, dass Sie können sammeln so viele Daten wie möglich über das Daten-Verwendung und werden in der Lage zu assoziieren, dass die Nutzung mit anderen Daten, die Sie gesammelt haben, über die Ziel-domain. Als solche, würde ich nicht erwarten, dass die API-key-überprüfung sehr viel komplexer sein als das, was ich oben beschrieben habe - der ROI auf Weiterführender Ansatz ist zu niedrig.
Und natürlich gibt es auch die Sorge um mögliche XSS-Attacken durch Ihre API. Aber ich glaube nicht, dass Ihr API-key gebunden ist, zu viel in der anti-XSS-code, die Sie haben.
InformationsquelleAutor der Antwort Franci Penov
Als mein Kommentar sagt:
Meine Vermutung ist, dass Google wahrscheinlich verwendet die IP-Adresse des Anrufers zusammen mit einem DNS-lookup. DNS ist nicht wirklich spoofable, wie Sie Ihre DNS-Einträge müssen korrekt für die website, um auch Ihnen zu erhalten.
Aber, auch das hat seine Probleme, denn wenn ein server verwendet einen Round-Robin-IP-Adresse DNS-Konfiguration, Google wird umgeleitet, um eine andere IP-Adresse bei einem DNS-lookup.
Aus der FAQ
Meine Vermutung ist, dass es vielleicht die
Host
header, die gesendet wird, wenn die Seite anfordern, die würde der Arbeit, wie normalerweise Google fordert Sie auf, zählen Sie die API-Skript direkt in die Seite. Dann das script hat Zugriff auf die Header, die für die aktuelle Seite und verwenden können, zu überprüfen.Meine Vermutung wird gestützt durch die Tatsache, dass es nicht funktioniert für die IP-Adressen oder Aliase, was bedeutet, dass es nicht einen DNS-check.
DIESE Methode kann nicht gefälscht werden, es muss der korrekte header um auf die Seite zuzugreifen. Dies bedeutet jedoch, dass alle Aliase für die domain wird nicht funktionieren.
Allerdings bedeutet dies auch, dass, MÜSSEN Sie eine Javascript-Bibliothek Zugriff auf den code, da Sie nicht können, aktivieren Sie das Kontrollkästchen server-Seite, glaube ich.
InformationsquelleAutor der Antwort Tyler Carter
Ich Stimme mit allen Punkten dass Franci Penov aufgeführt hat. möchte ich deutlich machen, ein wenig auf die Verwendung eines anderen API-key. Lassen Sie uns annehmen, Sie registrieren
key1
mitexample.com
.Ersten Versuch – Wenn
anothersite.com
hat<script src="http://www.google.com/jsapi?key=key1">
könnte Google das überprüfen der referrer (die hash-Schema genannt) und in diesem Fall gibt es eine Diskrepanz. Wie hat das böse Angreifer bewältigen, da eine Menge Leute haben erwähnt, dass der referer manipuliert werden können? Dies nicht wirklich hier. Sicher, Sie könnten senden Sie beliebige Header, wenn Sie die Anfrage, aber wie kommt das böse hacker spoof referrer für Benutzer aufanothersite.com
? Dies ist im Allgemeinen nicht leicht. Es wurden alte Versionen von flash auf IE 6 erlaubt, dass die Angreifer setzen beliebiger Header machen, wenn cross-domain-requests, aber im Allgemeinen ist dies nicht praktikabel, für Skriptsrc
. Ich bin nicht sicher, ob die eingebundenen Javascript funktioniert die Validierungdocument.location
um zu verhindern, dass dieser (wahrscheinlich nicht).Zweiten Versuch – Ein böser Angreifer kopiert Google-Javascript-API-key aus
mysite.com
's page source und dann bettet modifizierten javascript-Code aufanothersite.com
. Nun, Google kann nicht überprüfen, alles andere (die remote-IP-Adresse wird dem computer des Benutzers, und es gibt nicht eine ganze Menge Sie oder Google tun können).Also, wenn Sie wollen, aus irgendeinem Grund halten Sie Ihren API-key secret (ein Grund, böswillige person kann Ihr Schlüssel schwarze Liste gesetzt/gesperrt), dann Betten Sie keinen Schlüssel im client und proxy-Anfragen über Ihren server (code der Anwendung hat nun die Schlüssel).
InformationsquelleAutor der Antwort mar
Der Grund, warum es funktioniert, ist, dass Sie keine API-Aufrufe mit javascript. Browser-Sicherheit verhindert, dass javascript-Anfragen irgendwo, außer auf die Domäne, die das javascript stammt. Weil dieses, alle API-Aufrufe aus javascript, müssen, schicken, die über Ihre server, wo der API-key gespeichert ist (der api-Schlüssel ist nie zu sehen und javascript).
InformationsquelleAutor der Antwort Jeffrey Aylesworth