Ho riscontrato un problema con un servizio Web con gli utenti che tentano di indovinare gli ID delle applicazioni eseguendo il loop su ID casuali.Come lasciare il client in attesa del servizio Java JAX-RS per prevenire il DOS
Le cattive richieste provengono da IP casuali, quindi non posso semplicemente escludere il loro IP (a meno che non lo faccia dinamicamente, ma non lo sto ancora esaminando).
Attualmente quando rilevo un client che ha effettuato 10 tentativi di ID app non validi li ho inseriti in un elenco di blocchi nella mia app e ho rifiutato ulteriori richieste da quell'IP per quel giorno.
Voglio ridurre al minimo la quantità di lavoro che il mio server deve fare, poiché il client cattivo continuerà a inviare migliaia di richieste anche se vengono rifiutate. So che ci sono soluzioni firewall dinamiche, ma per ora voglio qualcosa di facile da implementare nella mia app. Attualmente sto dormendo per 5 secondi per ridurre le chiamate, ma quello che voglio fare è semplicemente non inviare una risposta al client, quindi deve scadere.
Qualcuno sa come farlo in Java, in JAX-RS?
Il mio servizio è come,
@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
L'attaccante probabilmente non si preoccupa se i tempi di richiesta fuori. Sembra che provenga da una bot farm, il che significa che lasciare la connessione aperta per sempre è irrilevante. Non so di JAX RS, ma in Java guarderei il servlet asincrono (o le continuazioni) per non legare un thread del server che dorme per 5 secondi. Scusa, non so come farlo in JAXRS! – Jamie
L'aggiunta del sonno riduce le chiamate, quindi lasciare che il timeout riduca ulteriormente le chiamate, penso che provenga da un'app Androd, non da una farm – James
Hey @James hai provato a reindirizzare i client in un posto veramente lento o in un file enorme da qualche altra parte ? Se il client accetta il reindirizzamento, sarà occupato per un po 'e non avrai più bisogno di un thread dormiente. – konqi