Python API Spam Prevention?
Hallo Freunde,
ich nutze ein Python Script das automatisch nach erfolgreicher Registrierung ein JSON String zu meiner Website sendet, per requests.post im Format: https://[URL]/upload.php
Von dort werden die Daten verarbeitet und in der Datenbank eingetragen.
Nun ist mir aber klar, dass natürlich jeder theoretisch die URL entnehmen könnte, und ein kleines Script erstellen kann, das permanent Anfragen sendet und damit die Datenbank mit Invalider Daten füllt.
Nun würde ich gerne erfahren, was man dagegen tun kann!
Mit freundlichen Grüßen
1 Antwort
Du kannst mehrere Schutzmaßnahmen einbauen, wie z.B. CAPTCHA-Überprüfung, API-Schlüssel oder Token-basierte Authentifizierung, um sicherzustellen, dass nur berechtigte Anfragen akzeptiert werden. Zudem hilft es, Anfragen mit einer Rate-Limitierung zu versehen und verdächtige IPs oder Muster zu blockieren, um Missbrauch zu verhindern.
Ich gehe davon aus, Du hast keine Kontrolle über die Ausführung des Pythonskriptes - Will sagen, man könnte das Skript auch immer wieder starten - insofern wäre es auch egal, ob dort ein nicht extrahierbarer Schlüssel o.ä. drin läge.
Man könnte ein time based ticket nutzen.
Das Skript bittet um ein Ticket, dieses ist zeitlich begrenzt gültig, z.B. 1 Sekunde. Beim eigentlichen Übermittlungsschritt muß das Ticket wieder vorgelegt werden (und wird gegengeprüft), ist kein Ticket vorhanden (oder fehlerhaft), werden die Daten verworfen. Nach Bedarf kann ein fehlendes oder falsche Ticket zu einem Gracing führen, also keine neuerliche Ticketvergabe für einen Zeitraum.
Nun noch die Rate der Ticketanforderungen limitieren..
Also verstehe ich das richtig, dass für eine Anfrage ein Ticket abgefragt wird um die Daten sichern zu dürfen?
Aber dann könnte der Angreifer doch für jede Request ein neu generiertes Ticket erstellen, damit jede Anfrage unique ist, oder verstehe ich das falsch?
Nein, Du hast schon grundlegend recht. Es verhindert im Endeffekt nur, daß Du direkt die Daten übermitteln kannst, weil der zusätzliche Schritt benötigt wird (Das kann man eben herausfinden, wenn man den Source anschaut).
In Kombination mit einer Ratenlimitierung (bzw. Beschränkung der Gesamttickets je IP) kannst Du zumindest ein Flooding halbwegs mitigieren.
Die Frage ist halt, wie es normalerweise nach dem Übermitteln der Daten weitergeht?
Normalerweise würde man bei eienr Registrierung ja z.B. eien Bestätigungsmail erzeugen. (zweiter unabhängiger Kanal).
Hallo, danke erstmal für deine Antwort. Momentan nutze ich eine Rate-Limitierung, wie könnte ich denn ein "API-Schlüssel oder Token-basierte Authentifizierung" integrieren? Denn das Problem ist ja, dass man Hardcoded API Key nicht im Code einbetten kann, da möglicherweise dies ausgelesen werden kann. LG