Wie effektiv vor unerlaubten API Zugriffen schützen?

pvalerio

Cadet 4th Year
Registriert
Apr. 2023
Beiträge
84
Hallo zusammen

Ich betreibe einen ChatGPT-Client im App Store. Die API-Anfragen leite ich über einen eigenen Server (nginx reverse proxy) an OpenAI weiter, der API-Key ist somit nur in der nginx config hinterlegt.

Das Problem ist, dass seit einiger Zeit irgendjemand meinen API-Zugang missbraucht um (vermutlich) Daten aus den GPT-Modellen abzugrasen. Dazu verwenden die eine Software namens "axios".

Habe schon einiges versucht:
  • Diesen axios User-Agent gesperrt (sie geben sich nun als meine App aus)
  • Die IP-Adressen deren Servern gesperrt (sie verwenden nun Surfshark VPN mit vielen unterschiedlichen IP-Adressen)
  • Mitgabe der DeviceUUID der Apple-Geräte als Authentifizierung an meinen Server (sie generieren nun einfach Random IDs)

So wie ich herausgefunden habe, sniffen die einfach den HTTPS-Verkehr (MITM mittels eigenes Zertifikat?) zwischen meiner App und meinem Server und bauen die Requests dann nach.

Wie kann ich mich denn effektiv davor schützen, jemand ne Idee?

Gruss
 
  • Gefällt mir
Reaktionen: blablub1212
Hi,

API Protection ist ein Thema für sich. Ich denke Du müsstest in Deiner App einen eigenen Token generieren, der bei der Installation der App angelegt wird und eben individuell ist.
 
  • Gefällt mir
Reaktionen: Lawnmower und madmax2010
Mhm... Dazu wäre diese DeviceUUID ganz gut geeignet, nur bräuchte ich ja dann eine weitere Schnittstelle zum Server, welche mir dann die DeviceUUID in der nginx config whitelistet. Aber diese Schnittstelle liesse sich ja auch wieder sniffen.
 
Braucht's einen Nutzeraccount, um deine App zu nutzen?
 
@pvalerio Schade.
Was theoretisch etwas bringen könnte:
bei Firebase-Apps kann man anonyme Accounts anlegen (merkt der Nutzer nicht) und die Kommunikation zwischen der App und Firebase mit AppCheck absichern. Sowohl unter iOS als auch unter Android. Damit können dann nur signierte Apps mit deinem Firebase-Backend sprechen.

Vielleicht gibt es diese Signierungsmöglichkeiten auch für dich, ohne Firebase.
Oder du nutzt Firebase und ersetzt deinen Reverse-Proxy durch eine Firebase-Function.
 
@pseudopseudonym Das hört sich echt gut an, habe bisher nicht mit Firebase gearbeitet, ich schaus mir an.
 
Bevor ich die ganze Implementierung ändere habe ich eine Idee, die ich noch ausprobieren möchte: Ich könnte eine Art 2FA einbauen. Sprich einen z.B. 6-stelliger Code, der von beiden Seiten (App und Server) aus einer Formel generiert wird, und wenn der übereinstimmt, lässt nginx die Verbindung zu.

EDIT: Scheint als hätte ich den Übeltäter längst gesperrt. Die anderen Anfragen kamen von einem "echten" Benutzer, der es einfach masslos übertrieben hat... Er hat sich soeben per Support bei mir gemeldet. Die ändernden DeviceUUIDs kamen vom Neuinstallieren der App.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: NJay, derlorenz und Sleipnir
Andere Frage, ist das so überhaupt erlaubt was du da betreibst? Im Grunde tunnelst du ja alle Anfragen durch deinen Nutzer-Account bei OpenAI wenn ich dich richtig verstehe.
Oder hast du irgendeinen besonderen Vertrag mit denen?
 
@Dango. Von der OpenAI Webseite: "You can now request access in order to integrate the API into your product, develop an entirely new application, or help us explore the strengths and limits of this technology." Wüsste nicht was dagegen spricht, machen soweit ich weiss alle so. Blöd ist natürlich nur wenn der API Key im Programmcode und somit fremde Hände gelangt.
 
@h00bi GPT-4 (demnächst GPT-4-Turbo) und DALL-E 2 zu einem Drittel des ChatGPT-Plus Preises, und keine Datensammlung.
 
pvalerio schrieb:
@Dango. Von der OpenAI Webseite: "You can now request access in order to integrate the API into your product, develop an entirely new application, or help us explore the strengths and limits of this technology." Wüsste nicht was dagegen spricht, machen soweit ich weiss alle so. Blöd ist natürlich nur wenn der API Key im Programmcode und somit fremde Hände gelangt.
Das verstehe ich aber eher so, dass man extra anfragen muss um diesen Access zu bekommen. Also ein normaler user account reicht nicht aus.
 
@Dango. Kannst ja mal anfragen wenn es dich interessiert und rückmelden :-)
 
Zurück
Oben