Ich habe ein Problem mit einem Webdienst mit Benutzern, die versuchen, Anwendungs-IDs durch Schleifen über zufällige IDs zu erraten.Wie Client auf Java JAX-RS-Dienst warten, um DOS zu verhindern
Die schlechten Anfragen kommen von zufälligen IPs, also kann ich ihre IP nicht einfach verbieten (außer ich mache es dynamisch, aber ich schaue das noch nicht an).
Derzeit, wenn ich einen Client, der 10 schlechte App-ID-Versuche gemacht hat, entdecke ich sie in eine Sperrliste in meiner App, und lehnen weitere Anfragen von dieser IP für den Tag.
Ich möchte den Arbeitsaufwand meines Servers minimieren, da der fehlerhafte Client weiterhin Tausende von Anfragen sendet, obwohl sie abgelehnt werden. Ich weiß, dass es dynamische Firewall-Lösungen gibt, möchte aber vorerst etwas in meiner App implementieren. Derzeit schlafe ich für 5 Sekunden, um die Anrufe zu reduzieren, aber was ich tun möchte, ist einfach keine Antwort an den Client zu senden, so dass es eine Zeitüberschreitung hat.
Wer weiß, wie man das in Java macht, in JAX-RS?
Mein Service ist wie,
@Path("/api")
public class MyServer {
@GET
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
@Path("/my-request")
public String myRequest(String type,
@Context HttpServletRequest requestContext,
@Context HttpServletResponse response) {
...
}
See: How to stop hack/DOS attack on web API
Der Angreifer wahrscheinlich kümmert sich nicht darum, ob die Anforderung mal aus. Es hört sich an, als käme es von einer Bot-Farm, was bedeutet, dass die Verbindung für immer offen bleiben muss. Ich weiß nicht über JAX RS, aber in Java würde ich asynchrone Servlet (oder Fortsetzungen) betrachten, um keinen Server-Thread zu binden, der für 5 Sekunden schläft. Tut mir leid, ich weiß nicht, wie man das in JAXRS macht! – Jamie
Das Hinzufügen des Schlafes reduziert die Anrufe, so dass die Zeitüberschreitung Anrufe weiter reduzieren sollte. Ich denke, es kommt von einer Androd-App, nicht von einer Farm. – James
Hey @James, du hast versucht, die Clients irgendwo wirklich langsam oder eine riesige Datei umzuleiten ? Wenn der Client die Umleitung akzeptiert, wird er für eine Weile besetzt sein und Sie brauchen keinen schlafenden Thread mehr. – konqi