2016-03-19 10 views
0

Ich habe eine Django-Webanwendung (mit Nginx-Webserver), wo Benutzer interessante Statusmeldungen posten können.Verhindern von POST-Flut auf Django-Formularen

Einige Benutzer verwenden Skripts zum Ausführen einer POST-Flut. Ich habe fail2ban implementiert, so dass diese selten länger als 2-3 Sekunden dauern. Aber ich muss wissen, ob es andere Möglichkeiten gibt, einen nichtmenschlichen POSTer zu stoppen. Stellen Sie sich den Text wie folgt plötzlich auf der Website erscheint:

6:07.371806+00 |             | 0  | 2 
2772081 | Hfd                                 
                           |   8322 |  11880 | 2016-03-14 09:0 
7:01.909866+00 |             | 0  | 2 
2772090 | ...                                 
                           |   8322 |  11880 | 2016-03-14 09:0 
7:11.392105+00 |             | 0  | 2 
2772110 | .....                                
                           |   8322 |  11880 | 2016-03-14 09:0 
7:33.172462+00 |             | 0  | 2 
2772119 | Kokjhd                                
                           |   8322 |  11880 | 2016-03-14 09:0 
7:43.189524+00 |             | 0  | 2 
2772128 | Hfs                                 
                           |   8322 |  11880 | 2016-03-14 09:0 
7:52.209139+00 |             | 0  | 2 
2772171 | Lloo                                 
                           |   8322 |  11880 | 2016-03-14 09:0 
8:34.195006+00 |             | 0  | 2 
2772178 | Kkjh                                 
                           |   8322 |  11880 | 2016-03-14 09:0 
8:42.976177+00 |             | 0  | 2 
2772211 | Kkkkkk                                
                           |   8322 |  11880 | 2016-03-14 09:0 
9:17.003594+00 |             | 0  | 2 
2772230 | Kmkkkjhhf                               
                           |   8322 |  11880 | 2016-03-14 09:0 
9:33.680043+00 |             | 0  | 2 
2772238 | Lkkk   

Meine Form ist ziemlich Vanille. Zum Beispiel:

Gibt es überhaupt einen Weg, ich kann solches Verhalten in meinem Code annullieren? Ich weiß von Honeypots, die zum Beispiel dazu dienen, Spam-Bots in Schach zu halten, aber böswillige menschliche Handler von Scripts, die meine App überschwemmen, werden nicht darauf hereinfallen. Ich könnte hier etwas Grundlegendes vermissen?

Beachten Sie, dass die Überschwemmungen oft von der Art sind ., .., ..., ...., ....., ......, ....... (d. H. Sich wiederholende Zeichen, mit kleinen Änderungen an der Seite-Schritt meine Logik, die nicht den Benutzer zweimal die gleiche Sache veröffentlichen). Kann ich etwas einrichten, das POST-Anfragen, bei denen der Inhalt mit dem vorherigen POST übereinstimmt, von demselben Benutzer mit 95% iger Genauigkeit einschränkt? Schon mal davon gehört oder es probiert? Bitte beraten.

Antwort

0

Sieht so aus, als müssten Sie Benutzeranfragen drosseln. Werfen Sie einen Blick auf Django Throttle Requests

+0

Okay, das ist eine andere Schicht, abgesehen von Fail2Ban. Auch sind die Fluten oft von der Art "., .., ..., ...., ....., ......, ......." (dh sich wiederholend, mit kleinen Änderungen am Seitenschritt meiner Logik, die es dem Benutzer nicht zweimal erlaubt, dasselbe zu posten). Kann ich eine Regex einrichten, die POST-Anfragen, bei denen der Inhalt mit dem vorherigen POST übereinstimmt, von demselben Benutzer mit 95% iger Genauigkeit einschränkt? Schon mal davon gehört oder es probiert? –

+0

Während ich Ihr Problem @HassanBaig verstehe, gibt es keine dünne Lösung für dieses Problem. Ich bin sicher, dass Sie verstehen, dass Regex dieses Problem nicht lösen kann - es sei denn, Sie entscheiden sich dafür, regex dynamisch aus Anforderungsinhalten zu erstellen. – zEro

+0

Ihre beste Wette wäre, eine serverseitige Validierung zu implementieren, die eine minimale Übereinstimmung mit (etwa) 10 vorletzten Posts in der letzten Stunde gewährleistet. Natürlich, das und Drosseln - weil du nicht willst, dass Bots 100 Anfragen/min posten (alle sehr unterschiedlich, aber bedeutungslos). – zEro