Domanda

Sto cercando di scrivere una funzione di reimpostazione della password migliorata per uno dei nostri siti Web pubblici e, oltre a un captcha migliore, ho voluto contrassegnare un nome utente che tenti di accedere senza successo x quantità di volte in meno di y minuti . Il primo pensiero era di avere un database che registra ogni tentativo e poi dopo il massimo numero di tentativi nel tempo - semplicemente blocciamo l'account fino a quando non viene ricevuta una telefonata dal manager del dipendente per ripristinarlo.

Qual è un approccio migliore che non richiede persistenza tramite SQL. (Cookie / qualcos'altro?) Se uno non esiste, come posso farlo con un approccio più pulito? per qualche ragione il mio cervello è pieno oggi

È stato utile?

Soluzione

Controlla questa risposta su Limitarli.
Tentativi di accesso di limitazione

Jeff Atwood ha un post sul blog interessante sull'argomento nel caso in cui tu sia curioso.
http://www.codinghorror.com/blog/archives/001206.html

La loro memorizzazione in un database può diventare noiosa e finirai per preoccuparti di inondare la tua tabella con tentativi di accesso falliti. Inoltre, archiviare qualcosa sul computer dell'utente che controlla questo è anche difficile perché hanno il controllo su tutti i file sul loro computer e potrebbero facilmente ripristinare il contatore di accessi non riusciti, o peggio, restituirti dati difettosi / dannosi.

Altri suggerimenti

L'uso dei cookie o delle sessioni sarebbe negativo, poiché un utente potrebbe cancellare i propri tentativi di accesso semplicemente cancellando i cookie. Forse usare un file in una directory temporanea per memorizzare i tentativi di accesso sarebbe appropriato?

Beh, un cookie non è utile contro un utente malintenzionato (rimuoveranno semplicemente il cookie o non lo invieranno a te). Se hai uno stato di applicazione in memoria, potresti essere in grado di usarlo, ma devi fare molta attenzione, poiché ciò potrebbe farti riempire la memoria molto rapidamente, oltre a incorrere in problemi di scalabilità a causa di concorrenza e bloccaggio. E anche questo potrebbe non funzionare su un'app in esecuzione su molti server diversi, poiché probabilmente quello stato dell'applicazione non è condiviso tra quei server. Perché pensi che archiviare i dati nel database sia una cattiva idea?

È possibile utilizzare un database, utilizzare memcache e impostare un processo cron per scaricare periodicamente la tabella. Potresti anche utilizzare i cookie o le variabili di sessione, ma non mi affiderei a questi per motivi di sicurezza.

Sii consapevole che l'obiettivo di un cracker potrebbe non essere quello di ottenere l'accesso al tuo sistema, ma di renderlo inutilizzabile per tutti. Potrebbe forse raggiungere questo obiettivo accedendo volentieri con false credenziali per bloccare determinati utenti dal tuo sito! Penso che non troverai alcuna soluzione adeguata senza un database.

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