2012-11-20 5 views
6

Hier sind meine Anforderungen:Wie mache ich meine API privat, aber für mobile Anwendungen nutzbar?

  • Verwendbar von jeder mobilen Anwendung Ich bin

Entwicklung ich die mobile Anwendung bin zu entwickeln, deshalb kann ich keine Sicherungsstrategien umzusetzen.

  • Cacheable klassische HTTP Cache-Strategie

mit Ich bin mit Lack mit einer sehr einfachen Konfiguration und es funktioniert gut

  • nicht öffentlich verfügbar

I don‘ Ich möchte, dass die Leute meine API konsumieren können

Lösungen Ich denke an:

  • HTTPS verwenden, aber nicht die letzten Anforderungen abdecken, weil Anfrage Proxying von der Anwendung verwendet, um den API-Schlüssel zeigt.

Gibt es eine Möglichkeit, dies zu tun? Verwenden Sie zum Beispiel so etwas wie einen privaten/öffentlichen Schlüssel?

Das passt gut zu HTTP, Apache und Varnish.

+1

warum denken die Menschen immer dies möglich ist? Es muss über 1000 Fragen wie diese über SO geben. Ich bin fassungslos. – rook

Antwort

10

Es gibt keine Möglichkeit sicherzustellen, dass das andere Ende einer Netzwerkverbindung Ihre Anwendung ist. Dies ist kein lösbares Problem. Sie können Dinge mit Zertifikaten, Schlüsseln, Geheimnissen, was auch immer verschleiern. Aber all dies kann vom Endbenutzer rückentwickelt werden, weil sie Zugriff auf die Anwendung haben. Es ist in Ordnung, ein wenig Verschleierung wie Zertifikate oder ähnliches zu verwenden, aber es kann nicht sicher gemacht werden. Ihr Server muss davon ausgehen, dass jeder, der sich mit ihm verbindet, feindselig ist und sich dementsprechend verhält.

Es ist möglich, Benutzer zu authentifizieren, da sie Konten haben können. So können Sie sicher stellen, dass nur gültige Benutzer Ihren Service nutzen können. Aber Sie können nicht sicherstellen, dass sie nur Ihre Anwendung verwenden. Wenn Ihre aktuelle Architektur dies erfordert, müssen Sie ein Redesign durchführen. Es ist nicht lösbar und auf den meisten mobilen Plattformen nicht lösbar.

Wenn Sie ein Stück sichere Hardware wie eine Smartcard integrieren können, ist es möglich, die Sicherheit zu verbessern, indem Sie sicher sein können, dass der Mensch am anderen Ende tatsächlich ein Kunde ist, aber selbst das nicht Stellen Sie sicher, dass Ihre Anwendung diejenige ist, die sich mit dem Server verbindet, nur dass die Smartcard für die Anwendung verfügbar ist, die eine Verbindung herstellt. Weitere Informationen zu diesem Thema finden Sie unter Secure https encryption for iPhone app to webpage.

1

Obwohl es wahr ist, gibt es im Grunde keine Möglichkeit zu garantieren, dass Ihre API nur von Ihren Kunden konsumiert wird, es sei denn, Sie verwenden ein sicheres Hardwareelement, um das Geheimnis zu speichern (was bedeuten würde, dass Sie Ihr eigenes Telefon von Grund auf neu erstellen könnten Wenn Sie eine nicht offizielle Client-App verwenden, gibt es einige ziemlich effektive Dinge, die Sie tun können, um die API zu verschleiern. Verwenden Sie zunächst HTTPS, das ist selbstverständlich. Aber der Schlüssel hier ist, in Ihrer App ein Zertifikat zu pinnen.Das Zertifikats-Pining ist eine Technik, in der Sie das gültige öffentliche Schlüsselzertifikat für den HTTPS-Server speichern, den Sie verbinden möchten. Dann bestätigen Sie bei jeder Verbindung, dass es sich um eine HTTPS-Verbindung handelt (akzeptieren Sie keine Downgrade-Angriffe), und, noch wichtiger, überprüfen Sie, dass es sich um genau dasselbe Zertifikat handelt. Auf diese Weise verhindern Sie, dass ein Netzwerkgerät in Ihrem Pfad einen Mann im mittleren Angriff ausführt, und stellt sicher, dass niemand in Ihrer Konversation mit dem Server mithört. Indem Sie das tun und ein bisschen schlau über die Art und Weise sind, wie Sie die allgemeinen API-Parameter in Ihrer Anwendung speichern (siehe Code-Verschleierung, insbesondere wie Sie String-Konstanten verschleiern), können Sie ziemlich sicher sein, dass Sie der Einzige sind, der mit Ihrem Server kommuniziert. Natürlich ist Sicherheit nur eine Frage davon, wie stark jemand in deine Sachen einbrechen will. Dies verhindert nicht, dass ein erfahrener Reverse-Engineer Zeit übrig hat, um den Quellcode zu dekompilieren und zu finden, wonach er sucht. Aber all dies wird dazu führen, dass er sich die Binärdatei ansieht, was ein paar Größenordnungen schwieriger ist, als nur einen Mann im mittleren Angriff auszuführen. Dies ist bekannt für die neuesten Schnappschüsse von ausgelaufenen Bildern. Drittanbieter-Clients für Snapchat existieren, und sie wurden durch Reverse-Engineering der API mittels eines Sniffers erstellt, der den Verkehr während eines Mannes in der mittleren Attacke betrachtet. Wären die Entwickler der snapchat-App schlauer gewesen, hätten sie ihr Zertifikat in ihre App gesteckt, was absolut garantiert, dass der Server von snapchat mit ihnen kommuniziert, und die Hacker müssten die Binärdatei überprüfen, was vielleicht eine viel mühsamere Aufgabe ist der Aufwand wäre nicht durchgeführt worden.