Algoritmo per upload limitatori di velocità con 3 file max

0

Voglio limitare la frequenza di upload del file al nostro servizio web per prevenire il denial-of-service (diretto al server) - in particolare, cartelle temporanee che si riempiono di caricamenti fasulli.
Questo potrebbe essere il comportamento scorretto dell'utente, o, se questo va su http :, qualcuno che finge di essere l'utente.
Ci sono già alcune misure, come limitare le dimensioni del file, controllare l'agente utente, ma voglio aggiungere una sorta di limitazione della velocità.

  • Un utente può caricare 3 file "contemporaneamente".
  • Supponiamo che l'azione dell'utente legittima richieda almeno 5 secondi (tra caricamenti validi).
  • Gli utenti sono identificati da UserID, hanno già effettuato l'accesso

L'idea corrente è di mantenere un elenco / array con i tre tempi di caricamento (tentativo) più recenti per ID utente e scartare il caricamento se la differenza tra il tempo di caricamento (ora di fine della transazione) e la più vecchia delle tre volte è meno di 5 secondi.

Esempio: un utente carica file a 1,3,7,15,20,21,22,23,24,36 secondi:

Time  Array
      [0,0,0]    Initial situation
1     [0,0,0]    Comparing with first entry 0 - allowed 
3     [0,0,1]    Idem
7     [0,1,3]    Idem
14    [1,3,7]    14-1  > 5 Allowed
20    [3,7,15]   20-3  > 5 Allowed
21    [7,15,20]  21-7  > 5 Allowed
22    [15,20,21] 22-15 > 5 Allowed
23    [20,21,22] 23-20 < 5 Upload discarded
24    [21,22,23] 24-21 < 5 Upload discarded
36    [22,23,24] 36-24 > 5 Allowed

Per me la domanda è se questo è un algoritmo abbastanza decente per valutare limitare i caricamenti. Ma in particolare:
Quando / dove fallirà? Dove vedi scappatoie?

Note:

  • Gestisco già un token thread-safe per ogni utente, quindi ciò significherebbe solo aggiungere 3 DWORD (per i conteggi delle tacche)
  • Con lo spoofing di un utente, un utente malintenzionato negherebbe i caricamenti per quell'utente, ma non è quello che voglio proteggere contro
  • Non abbiamo disposizioni per gestire gli attacchi di riproduzione; questa è una discussione diversa che non voglio mescolare con questa
  • FWIW sto programmando in Delphi XE2
posta Jan Doggen 12.04.2016 - 11:34
fonte

0 risposte

Leggi altre domande sui tag