2012-04-27 11 views
7

In meinem Fall verwende ich die Dropbox-API. Momentan speichere ich den Schlüssel und das Geheimnis in einer JSON-Datei, nur damit ich es gitimnore und es aus dem Github-Repo heraushalten kann, aber offensichtlich ist das nicht besser, als es aus Sicherheitsgründen im Code zu haben. Es gab viele Fragen zum Schutz/Verschleierung von Python vor (in der Regel aus kommerziellen Gründen) und die Antwort ist immer "Do not, Python ist nicht dafür gedacht."Wie sollte ich API-Schlüssel in einer Python-App speichern?

Ich bin also nicht auf der Suche nach einer Möglichkeit, den Code zu schützen, sondern nur nach einer Lösung, die es mir erlaubt, meine App zu verbreiten, ohne meine API-Details offenzulegen.

+0

stopfen sie in einer Textdatei als verschlüsselte Werte. Erstellen Sie einen privat gespeicherten Verschlüsselungsschlüssel, entschlüsseln Sie ihn bei Bedarf. Es könnte einen besseren Weg geben, aber dieser Weg hat in der Vergangenheit gut funktioniert. –

+0

Wenn jemand das Programm auf seinem Computer ausführt und das Programm den Schlüssel verwendet, wird es praktisch offenbart. Es braucht kein Genie, um WireShark hochzufahren, das Programm zu verbinden und das Capture nach Verbindungen mit Dropbox zu filtern (oder nach einem anderen Kriterium - im schlimmsten Fall durch ein paar hundert Pakete). Und das bloße Verschleiern des Programms würde Ihnen nichts kaufen, da Sie das String-Literal, das der API-Schlüssel ist, nicht ändern können, oder es wäre für Ihr Programm nutzlos. – delnan

+0

@delnan Aber würde der API-Schlüssel im HTTP-Verkehr sichtbar sein? Dropbox macht alles über SSL. Ich weiß nicht, ob sie GET- oder POST-Variablen verwenden oder sie einfach in die Header der HTTP-Anfrage einfügen. Werden diese Dinge in einer HTTPS-Anfrage oder nur im Hauptteil der Anfrage verschlüsselt? – espekia

Antwort

2

Nur Text. Jeder Verschleierungsversuch ist nutzlos, wenn der Code verteilt wird.

2

Ich weiß nicht, ob das in Ihrem Fall machbar ist. Sie können jedoch über einen Proxy, den Sie hosten, auf die API zugreifen.

Die Anfragen von der Python-APP gehen zum Proxy und der Proxy macht die Anfragen an die Dropbox-API und gibt die Antwort an die Python-App zurück. Auf diese Weise wird Ihr API-Schlüssel auf dem Proxy angezeigt, den Sie hosten. Der Zugriff auf den Proxy kann auf beliebige Weise gesteuert werden. (Zum Beispiel Benutzername und Passwort)

+0

Im Allgemeinen ist das eine gute Lösung, aber in meinem Fall habe ich Dropbox gewählt, weil ich weder die Ressourcen noch die Neigung habe, meinen eigenen Server zu hosten. Ich wollte mich nur darauf konzentrieren, den Client zu machen. – espekia

1

Es gibt zwei Möglichkeiten, auf dem je nach Szenario:

Wenn Sie eine Web-Anwendung für den Endanwender zu entwickeln, hosten nur in einer Weise, die Ihre API-Schlüssel kommt nicht auf die Offenlegung . Es sollte also in Ordnung sein, es in einer separaten Datei gespeichert zu halten und es nur auf Ihren Server hochzuladen (solange es keinen Verstoß gegen Ihren Server gibt). Jede Verschleierung wird keinen praktischen Nutzen bringen, sondern nur ein falsches Sicherheitsgefühl vermitteln.

Wenn Sie ein Framework/eine Bibliothek für Entwickler oder eine Clientanwendung für Endbenutzer entwickeln, bitten Sie sie, selbst einen API-Schlüssel zu generieren.