2016-08-04 7 views
0

Ich bin ziemlich neu zu ExpressJS und ich muss die Verbindung mit dem Benutzer, wenn die Anzahl der fehlgeschlagen Logins für seine IP (in der Datenbank gespeichert) überschritten maximal zulässige Anzahl, aber ich kann keine Dokumentation finden, wie zu mach das. Es sieht aus wie server.close() funktioniert, aber wie ich es verstehe, schließt es den gesamten Server, nicht nur einige Verbindung. Wie kann man die Verbindung von der ExpressJS Middleware trennen?ExpressJS Drop-Verbindung

+1

Während es den Benutzer nicht daran hindert, Daten zu senden, können Sie 'res.end' direkt aufrufen, die Antwort wird eine" leere "HTML-Datei sein, die fast den gleichen Effekt hat. – DrakaSAN

+0

@DrakaSAN Danke, es funktioniert wirklich, vielleicht ist das genau das, was ich brauche – snowfinch27

+1

Ich würde vielleicht Cookie den Client auf den endgültigen fehlgeschlagenen Versuch, mit einem Datum Zeit, wenn Sie es getan haben. Fügen Sie dann benutzerdefinierte Middleware hinzu, um zu prüfen, ob Cookie und DrakaSAN funktioniert. Es bedeutet, dass Sie diese Middleware vor einer komplexeren Anfrageverarbeitung einsetzen können, ohne dass Abfragen in Ihre Datenbank gespammt werden. Der Klient kann es natürlich blockieren oder manuell löschen, also sollte es nicht Ihre einzige Prüfung sein. Nur ein Gedanke. – Mic

Antwort

1

ExpressJS stellt keine Verbindung zum Browser her und verarbeitet nur HTTP (S) -Anfragen, daher gibt es keine Möglichkeit, sie zu löschen. Die Sockets bietet, aber a nehme an, dass das nicht dein Fall ist.

In diesem Fall können Sie eine Antwort mit einer Nachricht senden wie 'Die maximale Anzahl von Login-Versuchen wurde erreicht. Bitte versuchen Sie es erneut in * Minuten. Und vielleicht verstecken Sie das Login-Formular.

+0

danke, und kann ich Sockets von NodeJS verwenden? – snowfinch27

+0

sicher kannst du, hier die nette lib dafür: [socket.io] (http://socket.io/). Aber zu welchem ​​Zweck brauchen Sie Steckdosen? –

+0

Ich muss die Verbindung mit einem einzelnen Benutzer basierend auf der Anzahl der fehlgeschlagenen Anmeldungen (aus der Datenbank) schließen, und ich kann jetzt keinen anderen Weg finden, ich würde wirklich jede Hilfe schätzen – snowfinch27

3

Eine alternative Möglichkeit zum "Trennen" der Verbindung besteht darin, sofort res.end() anzurufen, wodurch eine leere Antwort gesendet wird.

Der einzige Nachteil ist, dass die Anfrage immer noch durch jede vorherige Middleware geht, so dass sie nicht vor DoS-Angriffen auf Ihre Middleware schützen kann und nicht so effektiv ist wie das Fallenlassen der gesamten Verbindung bei einem DDoS-Angriff .