2012-07-13 16 views
6

Utilizziamo Tomcat 7 per la nostra applicazione web. Forniamo un'API basata su XML in modo che i nostri clienti possano comunicare con il nostro server in modalità machine-to-machine (non è necessario alcun browser Web). Le richieste vengono elaborate da un servlet.Tomcat e protezione contro le inondazioni

Abbiamo bisogno di impedire agli utenti di inviare troppe richieste di fila. Alcuni dei servizi che forniamo prevedono il polling dei risultati e gli utenti possono effettuare richieste in loop senza pause, effettuando dozzine di richieste al secondo senza alcun risultato.

Come possiamo proteggerci dall'essere sommersi da richieste inutili? C'è un modo semplice per bloccare le richieste a livello di entry servlet quando ci sono troppe richieste provenienti dallo stesso IP? C'è qualcosa Tomcat integrato per affrontare questo problema?

risposta

4

Supponendo che si stia utilizzando un proxy inverso di apache davanti a tomcat (se non si dovrebbe essere), utilizzare mod_cband sul livello apache.

2

Si potrebbe codice proprio.

I punti di partenza per osservare questo sarebbe l'API Servlet, in particolare l'interfaccia Filtro e il metodo getRemoteHost() dell'interfaccia SerlvetRequest.

Dovrebbe essere abbastanza facile scrivere un'implementazione di Filtro che memorizza un conteggio di richieste da ciascun host e agisce se supera un limite.

+1

A proposito di, ecco qualcosa che ho messo insieme per questo scopo: http://code.google.com/p/zxing/source/browse/trunk/zxingorg/src/com/google/zxing/web/DoSFilter. java È abbastanza semplice, ma potrebbe essere sufficiente per questo scopo. –

0

Spring Security ha molte delle caratteristiche di Apache httpd mod_security se si desidera una soluzione solo Java.

0

Apache mod_evasive o mod_security potrebbe coprire per il vostro bisogno qui. Puoi prendere in considerazione Cloudflare per attacchi più complessi che richiedono protezione hardware.

Problemi correlati