Domanda

Possibili / parziale duplicati:

Sto cercando il modo migliore per attuare un momento commovente tasso finestra limitante algoritmo per un'applicazione web per ridurre lo spam o attacchi di forza bruta.

Esempi di utilizzo sarebbe "Numero massimo di tentativi di accesso non riusciti da un determinato IP negli ultimi 5 minuti", "Numero massimo di (post / voti / ecc ...) negli ultimi N minuti".

Io preferirei usare un algoritmo finestra di tempo in movimento, piuttosto che un hard reset delle statistiche ogni x minuti (come Twitter API).

Questo sarebbe per un C # / ASP.Net app.

È stato utile?

Soluzione

Utilizzare una tabella hash veloce basato sulla memoria come memcached . Le chiavi saranno bersaglio state limitando (per esempio un IP) e la scadenza di ciascun valore memorizzato dovrebbe essere il tempo massimo limitazione.

I valori memorizzati per ogni chiave conterranno un elenco serializzato degli ultimi N tentativi hanno messo a compiere l'azione, insieme al tempo per ogni tentativo.

Altri suggerimenti

Abbiamo scoperto Token Bucket è migliore algoritmo per questo tipo di rate-limiting. E 'ampiamente utilizzato in router / switch così i nostri ragazzi di funzionamento sono più familiarità con il concetto.

Giusto per aggiungere una risposta piu 'moderna' a questo problema: Per .NET WebAPI, WebApiThrottle è eccellente e probabilmente fa tutto quello che volete fuori dalla scatola.

E ' accessibile NuGet .

L'attuazione richiede solo un minuto o giù di lì ed è altamente personalizzabile:

config.MessageHandlers.Add(new ThrottlingHandler()
{
    Policy = new ThrottlePolicy(perSecond: 1, perMinute: 30, perHour: 500, perDay:2000)
    {
        IpThrottling = true,
        ClientThrottling = true,
        EndpointThrottling = true
    },
    Repository = new CacheRepository()
});

Ci trovi questa pagina per essere una lettura interessante:

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

La sezione di guardare fuori per partenze nel seguente modo:

  

Prevenire Denial of Service (DoS)

     

I servizi Web sono il bersaglio più attraente per gli hacker, perché anche un hacker di pre-scuola può portare giù un server ripetutamente chiamando un servizio Web che fa il lavoro costoso.

EDIT: domanda simile qui:

modo migliore per implementare richiesta throttling in ASP. NET MVC?

Ho appena aggiunto la risposta alla domanda richieste API di blocco per 5 minuti se supera il limite di velocità di API.
 Ho usato HttpRuntime.Cache per consentire solo 60 richieste al minuto. Il superamento del limite bloccherà l'API per il prossimo 5 minuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top