Zusammenfassen:
- Sie haben einen API-Schlüssel, der Ihnen von einem Anbieter ausgestellt wurde, damit Sie dessen API verwenden können, und Sie sind verpflichtet, zu verhindern, dass dieser Schlüssel anderen bekannt wird
- Sie rufen die API dieses Anbieters (für die der API-Schlüssel erforderlich ist) in Ihrem Anwendungscode auf
- Sie stellen die Anwendung auf Systemen bereit, auf denen Kunden Zugriff auf die Binärdateien haben und somit möglicherweise den Code dekompilieren / deobfuscieren oder den Datenverkehr abfangen können
Der beste Weg, um eine Gefährdung dieses Schlüssels zu verhindern, besteht darin, die Kontrolle darüber zu behalten. Dies bedeutet, dass es niemals auf einem Server bereitgestellt werden sollte, auf dem jemand außer Ihnen die Binärdatei lesen konnte, und niemals über eine Kommunikationsverbindung gehen sollte, die Sie nicht kontrollieren.
Wenn die Binärdateien außerhalb Ihrer Kontrolle liegen, liegt letztendlich alles in ihnen außerhalb Ihrer Kontrolle. Wenn jemand Datenverkehr abfangen kann, kann er den API-Schlüssel erfassen ( möglicherweise auch, wenn Sie SSL verwenden ).
Ich sehe zwei Hauptmethoden, um dies zu erreichen. Beide enthalten Ihren privaten API-Schlüssel nicht in Ihrer bereitgestellten Anwendung:
Erhalten Sie einen eindeutigen API-Schlüssel für jede Bereitstellung
Dies würde eine zusätzliche Beziehung zum Anbieter erfordern, in der Sie Schlüssel erhalten oder Ihre Kunden Schlüssel erhalten können.
Dies ist beispielsweise bei Produkten, die die Google Maps-API verwenden, häufig der Fall. Der Ersteller der Software verfügt über einen eigenen Schlüssel, den er beim Entwickeln / Ausführen seiner Kopie verwendet, der jedoch nicht in der Software enthalten ist. Stattdessen müssen Sie als Nutzer, der diese Software installiert, zu Google gehen und Ihre eigene API anfordern Schlüssel. Die Software verfügt lediglich über eine Konfigurationsoption zum Festlegen des zu verwendenden Google Maps-API-Schlüssels.
Bei vielen Anbietern, die vertraglich API-Schlüssel ausstellen, müssen Sie diese Schritte ausführen, sodass Sie möglicherweise ohnehin auf dem falschen Weg sind. Dies ist möglicherweise die einzige Lösung, die Sie gemäß den Nutzungsbedingungen des Anbieters und verwenden dürfen / oder irgendwelche rechtlichen Verträge, die Sie möglicherweise mit ihnen haben.
Verwenden Sie einen Proxy
Richten Sie eine Proxy-API ein, bei der Ihre Anwendung Ihre API (auf Ihren Servern) aufruft und Ihre API wiederum die API des Anbieters mithilfe des Schlüssels aufruft.
Möglicherweise benötigen Sie zusätzlichen Schutz für Ihre API, z. B. um sicherzustellen, dass nur Ihre Anwendung diese verwendet. Dies könnte geschehen durch:
- Wenn Sie die Funktionalität so spezifisch gestalten, kann sie nur Ihre App verwenden
- IP-Whitelists
- Einige vorhandene Lizenzierungs- / Autorisierungsmechanismen, die Sie bereits für Ihre Server haben
- Ihr eigenes API-Schlüsselsystem, in dem Sie Ihren Kunden Schlüssel ausstellen können
Beachten Sie hierbei, dass Sie dies möglicherweise nicht tun dürfen. Ihr Anbieter verfügt möglicherweise über Nutzungsbedingungen oder gesetzliche Verträge, die Sie daran hindern, einen "Aggregationsservice" oder einen Proxy zu erstellen. Sie müssen dies daher überprüfen.
Umgang mit Fehlverhalten
Selbst wenn Ihr Schlüssel nicht kompromittiert wird und einer Ihrer Kunden etwas unternimmt, das den Anbieter veranlasst, Ihren Schlüssel zu blockieren, werden plötzlich ALLE Ihre Kunden deaktiviert, und Sie müssen nur alle anderen aktualisieren.
Wenn Sie einen Ihrer Kunden blockieren möchten (z. B. wenn er nicht mehr bezahlt, die Software raubkopiert hat usw.), können Sie dies nicht tun, ohne ein Update für alle anderen auszugeben und dann den Schlüssel zu deaktivieren.
Die Logistik für alles, was über eine Handvoll Kunden hinausgeht, wird schnell unhaltbar.
Unabhängig davon, ob Sie als Proxy fungieren oder über einen eindeutigen Schlüssel für jede Installation verfügen, können Sie mit jeder dieser Situationen relativ einfach umgehen (und dies hat für andere kaum oder gar keine Auswirkungen).
Der Versuch, den Schlüssel zu schützen, während er in Ihre Software eingebettet ist, ist letztendlich eine vergebliche Anstrengung. Unabhängig davon, was Sie tun, kann jeder Angreifer, der Zugriff auf die Binärdateien, die Quelle und / oder den Kommunikationskanal hat und fest genug ist, um auf den Schlüssel zuzugreifen, dies tun.
Also nicht einbetten. "Der einzige Gewinnzug ist, nicht zu spielen."