Domanda

Sto pensando di costruire un sistema di login per Ruby on Rails, proprio come questo

http://visionmasterdesigns.com/ tutorial-creare-un-login-system-in-ruby-on-rails /

In termini di sicurezza, dovrei limitare i tentativi di accesso da parte di un utente se sbagliano il nome utente?

Inoltre, i passaggi di base degli accessi sembrano essere:

  • autenticazione di nome utente e password rispetto a quelli nel database
  • se nome utente e password autentici, creare una variabile di sessione
  • prima del filtro in modo che le pagine che richiedono l'accesso siano protette.

C'è qualcos'altro che dovrei considerare?

È stato utile?

Soluzione

Sì, limitando il numero di tentativi di accesso per ip (non per sessione) aumenta la sicurezza.

Sai che esistono già diversi sistemi di autenticazione con Rails? Non è necessario reinventare la ruota.
Ecco un elenco non esaustivo.

Se non desideri utilizzarne nessuno, puoi fare un esempio di ciò che stanno facendo.

Modifica 2013
Le librerie fornite sopra non sono più aggiornate e non potrei raccomandarle di usarle in una nuova applicazione. Dai un'occhiata a devise .

Altri suggerimenti

Innanzitutto, limitare la velocità della pagina di accesso per IP. Utilizzare un sistema captcha invisibile nella pagina di accesso. Quindi dovresti mettere i limiti di accesso per IP, ma dovresti anche mettere i limiti di accesso per utente come ultima risorsa per impedire alle botnet di forzare brutalmente da più IP. Invia un'e-mail all'utente se viene rilevato un tentativo di forzare la password. Non inviare orde di e-mail ripetute se qualcuno prova da un gruppo di IP diversi. In caso contrario, una botnet potrebbe causare spamming grave e, peggio ancora, causare un messaggio importante nella cartella spam. Assicurati di menzionare che potrebbero voler cambiare la loro password e / o aggiornarne la forza.

Se imposti i limiti di accesso IP, aumenta i limiti. Molti posti usano tre colpi e sei fuori. È pazzo e ostile per l'utente. Dovrebbe essere almeno dieci o più realisticamente e quando lo colpisci, dovresti ottenere un divieto basato sul tempo piuttosto che un " Chiama l'assistenza clienti " bandire. Nessuno riuscirà a forzare una password in dieci tentativi. Quindi raccomando un limite di accesso per IP di 10 e un limite di accesso per utente compreso tra 1.000 e 10.000 (abbastanza alto da vanificare gli attacchi denial-of-service, ma abbastanza basso che è improbabile che una botnet abbia già violato la password) . Dovresti avere una qualche forma di avviso al cercapersone sysadmin / on-call che c'è una botnet al lavoro che si innesca molto prima di raggiungere quella soglia. (Conserva un conteggio degli accessi non riusciti per tutti gli utenti e i singoli utenti, esegui una media mobile e avvisa se supera una delle due soglie. Ricorda che se qualcuno ha un elenco utenti sufficientemente ampio, la probabilità di riuscire per almeno un account nell'intero la base utenti corrisponde all'incirca alla probabilità di successo attaccando un solo account.)

Blocca gli attaccanti evidenti sul firewall. Scadono i divieti dopo un po '. Assicurati di fare in modo che l'assistenza clienti possa sbloccare qualcuno, ma assicurati che il divieto sia in qualche modo collegato al reato. Non dovresti sbannare qualcuno che ha tentato di rompere venti accessi utente diversi o qualcosa del genere. Il giudizio qui ovviamente, perché i kiddie di sceneggiatori con membri della famiglia senza colpa e nonne che sono stati rilevati dalle botnet possono sicuramente riuscire a farsi bandire dall'IP.

Se in realtà hai tempo per fare tutto ciò, avrai un modulo di accesso di prim'ordine. Dubito che tu ne abbia bisogno così tanto.

Un altro modo per farlo è con il rack. È possibile tenere traccia del numero di volte in cui un IP visita la pagina di accesso per un determinato periodo di tempo memorizzando i tentativi di accesso nel database, memcached, redis, tokyo cabinet, ecc. Quindi negare all'utente l'accesso alla pagina se hanno superato un set quota per un intervallo di tempo definito.

Damien ha suggerito Authlogic. Authlogic è il mio sistema di autenticazione preferito per Rails. È molto completo e adattabile. Esistono molti moduli esistenti per Authlogic e sono sicuro che potresti sfruttare uno di questi per far funzionare Authlogic per te.

Un'altra considerazione dovrebbe essere l'attacco Denial of Service. Limitare il numero di richieste a pagine dinamiche a un tasso ragionevole dovrebbe rendere più difficile per un utente malintenzionato eliminare il tuo sito. Pur aiutando con il problema di cracking della password, questo aiuterà anche a impedire agli utenti di manipolare i dati del sito in modi non intenzionali, il che potrebbe comportare un rischio per la sicurezza (forse attraverso la corruzione dei dati).

Se decidi di utilizzare questo approccio, dovresti provare a trovare un modulo ben supportato per aiutarti in questo (invece di implementare il tuo).

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