2012-07-13 12 views
21

Also, ich entwickle eine kleine Anwendung nur für mich selbst und vielleicht ein Open-Source-Projekt auf Git. Ich benutze eine API von Envato Marketplaces, und wie Sie alle wissen, gibt es einige Operationen, die keine Schlüssel benötigen, aber in der gleichen Zeit gibt es einige, die erfordern.Wie schützt man einen API-Schlüssel bei der Verwendung von JavaScript?

Zuerst habe ich einen netten API-Wrapper für die Envato-API in PHP erstellt, aber dann habe ich mich entschieden, ein wenig mit JavaScript zu experimentieren, also entwickle ich denselben Wrapper mit JavaScript. Bis jetzt habe ich keine Probleme mit den öffentlichen Operationen, aber ich muss jetzt den API Key verwenden.

Meine Frage wäre, wenn es eine Möglichkeit gibt, den API-Schlüssel in JavaScript zu schützen. Ich kann es nicht einfach im Klartext eingeben, da es dann von anderen benutzt werden kann, die den Code sehen. Würde es also eine Implementierung geben, bei der die API geheim bleibt? Vielleicht aus einer JSON-Textdatei mit XHR greifen?

+3

Lassen Sie Ihre Javascript-Aufrufe mit dem Server-Seite PHP interagieren, um die Methoden aufzurufen, die Privatsphäre erfordern. – asawyer

+1

@asawyer: Sie sollten das als Antwort setzen – Dancrumb

+0

@asawyer - Das ist die Sache, ich mache es bereits mit PHP, jetzt versuche ich es nur mit JS zu tun. Es wäre also unmöglich mit JS zu arbeiten. Was passiert, wenn ich einen Anruf tätige, der den Schlüssel aus einer JSON-Datei mit XHR ergreift und ihn dann an die Methode weitergibt? – Roland

Antwort

18

Kurze Antwort: Nein

Was auch immer tun, um Ihnen den Schlüssel zu verschleiern, haben Sie immer es zu schicken, um es irgendwie auf dem Client zur Verfügung zu stellen, und daher wird es möglich sein, sie zu extrahieren fx verwenden. Feuerwanze.

Selbst wenn Sie eine wunderbare magische Methode entwickeln, um den Schlüssel geheim zu halten, müssten Sie irgendwann die eigentliche API-Anfrage machen, und ein Angreifer könnte dies tun, da er vom Browser gesendet werden müsste lies den Schlüssel im Klartext aus dem Firebugs-Tab aus.

Die richtige Sache zu tun ist, einen PHP-Wrapper rund um die API-Aufrufe, die Schlüssel erfordern, und rufen Sie dann diesen Wrapper aus Javascript.

+9

Der Schlüssel wird geschützt, die Operation jedoch nicht. Ein Dieb braucht den Schlüssel nicht, wenn die Tür offen ist. –

+2

Kann der PHP-Wrapper erzwingen, dass Anforderungen von derselben Domäne stammen? Wie verhält sich das zur "same-origin policy"? Sieht so aus, als ob es nicht zuverlässig möglich ist, den Requester zu bestimmen: http://stackoverflow.com/questions/1153967/php-source-hostname-of-a-get-request ...? – Toph

+1

Wie würde der Wrapper irgendetwas verändern? –