Come evitare lo spam del servizio web?

3

Come posso impedire agli utenti di inviare spam al mio servizio web inviando migliaia di richieste?

Il mio servizio web è attualmente protetto da un token di convalida accessibile solo tramite autenticazione, ma non posso ancora evitare il fatto che il mio servizio web verificherà se il token esiste nel mio database.

Ho pensato di salvare il numero di tentativi per IP, ma comunque, dovrei controllare ogni volta nel mio database se l'IP provante è nella lista nera.

C'è un modo per evitare gli spammer dei servizi web?

    
posta Fortune 08.07.2015 - 16:25
fonte

4 risposte

1

Fail2ban è una buona opzione, ma creerà alcuni problemi se una parte considerevole della tua base utente è dietro un proxy, e qualcuno su quel proxy abuserà del tuo servizio e bloccherà ogni singolo utente del proxy.

Probabilmente hai un database tradizionale (MySQL, Postgres, Oracle, DB2) che ospita i tuoi dati, ma il sovraccarico dei token è troppo alto per loro.

Potresti usare un piccolo database NoSQL solo per i token e lasciare che il database principale si occupi dei dati. Redis è una buona opzione e CouchBase è un'altra buona uno. Couchbase è conosciuto per essere molto veloce, quindi proverei prima. D'altra parte, Redis sembra più facile da integrare.

    
risposta data 08.07.2015 - 17:05
fonte
1

Non puoi evitare il costo di una ricerca: a un certo punto dovrai eseguirne uno solo per vedere se il mittente è in blacklist o meno.

Quindi, la tua opzione migliore è probabilmente quella di assicurarsi che una ricerca di token sia abbastanza veloce da gestire il carico.

Tuttavia, dovresti comunque mantenere traccia nel tuo DB di tentativi non validi con la sorgente associata. Tale traccia dovrebbe consentire di verificare facilmente se un IP specifico ha un numero di errori più grande del previsto di recente. Controlla questo per primo al fine di limitare al minimo le ipotesi di token.

    
risposta data 08.07.2015 - 17:13
fonte
1

Se nel generare la pagina aggiungi un token hash basato sul timestamp più un segreto, includendo timestamp e token in ogni richiesta puoi rendere più difficile creare attacchi. Il token può essere controllato senza ricorrere al database. Anche qualsiasi richiesta con un timestamp troppo vecchio dovrebbe essere rifiutata.

Se si tratta di un'app di una sola pagina o simili in cui la pagina potrebbe non essere completamente aggiornata molto spesso, è possibile nel proprio servizio Web restituire un nuovo token hash e un timestamp nella risposta a qualsiasi richiesta autenticata.

    
risposta data 08.07.2015 - 17:25
fonte
0

Potresti provare a utilizzare fail2ban o software simile e implementare un " richiesta limite " regola.

Sarà basato sull'indirizzo IP ma non è necessario avere un controllo nel database per ogni richiesta.

Inoltre, quando un IP sarà nella lista nera, non raggiungerà più il tuo webservice in quanto il firewall bloccherà prima la richiesta in arrivo.

    
risposta data 08.07.2015 - 16:37
fonte

Leggi altre domande sui tag