Sicurezza di autorizzazione dell'utente generale

0

Sto creando un sito web che necessita dell'autorizzazione dell'utente. È la prima volta che creo un sito Web per la pubblicazione e anche la prima volta che cerco di fare qualsiasi forma di autorizzazione. Quello che segue è il mio piano, potresti dirmi se ho dei buchi evidenti e se c'è qualcos'altro di cui dovrei essere a conoscenza. Se interessato o pertinente sto usando un nodo di riposo restful e un back-end di mysql e backbone sul front-end.

Processo di accesso:

  1. L'utente tenta di accedere. In questo modo viene inviato un indirizzo e-mail, una password e una chiave generata casualmente (non è stato deciso su una quantità di bit).
  2. Il server di autorizzazione accetta queste informazioni, crittografa l'indirizzo e-mail e la password e lo confronta con i valori nella tabella user_auth del database di autorizzazione. Se c'è una corrispondenza, crea un ID di sessione.
  3. Il server di autorizzazione posiziona quindi l'ID di sessione, l'indirizzo email e la chiave casuale generata dall'utente in una riga della tabella di sessione (nel database di dati a cui accede principalmente dal server di dati) e invia all'utente un ID di sessione e qualsiasi altri dati di pagina rilevanti che vengono crittografati utilizzando l'ID di sessione come chiave.
  4. In caso di successo, l'utente riceve l'id di sessione e decrittografa i dati aggiuntivi e tutti i dati futuri utilizzando l'id di sessione.
  5. Ad ogni azione eseguita dall'utente, il client invierà l'indirizzo e-mail e l'ID di sessione crittografati con la chiave generata a caso originale che è stata inviata al server di dati, e se l'ID di sessione e l'indirizzo e-mail corrispondono, i dati vengono decrittografati utilizzando la chiave, e quindi si tenta di elaborare i dati.

Naturalmente cercherò anche di disinfettare tutti i dati prima che venga generata una query sql, ci saranno anche convalida del modulo live e validazione del modello backbone. L'utente mysql che utilizzeranno i server nodejs non avrà le autorizzazioni di eliminazione che saranno prese in considerazione tramite tag e un daemon in esecuzione sul back-end.

Per creare un account:

  1. L'utente invierà un indirizzo email, una password, il nome, il cognome al server di autorizzazione.
  2. Il server delle autorizzazioni lo posizionerà insieme a una data / ora in una tabella temp_user e una email ben formulata verrà composta con un ID di sessione incorporato nell'URL.
  3. L'utente farà clic sul link nell'e-mail a cui verrà indirizzato a "la pagina del tuo account è stata convalidata" o qualcosa del genere. Facendo clic sul collegamento salverà il valore dell'ID di sessione nel codice del client e creerà una chiave generata a caso che verrà inviata al server. In caso di successo mostrerà effettivamente all'utente la pagina.
  4. Sul lato server il server delle autorizzazioni inserisce il nome utente e la password, crittografati, nella tabella user_auth del database delle autorizzazioni, inserisce il nome e il cognome nella tabella utente nel database dei dati e quindi elimina (l'unica tabella avrà le autorizzazioni di eliminazione per) la riga corrispondente nella tabella temp_user.
  5. Ora il client e il server devono trovarsi nella stessa pagina del primo scenario.

se in qualsiasi momento l'id della sessione è nullo o non corrisponde all'utente verrà chiesto di accedere nuovamente, il processo ricomincerà da capo.

C'è qualcosa che mi manca?

    
posta The Composer 09.08.2013 - 23:02
fonte

2 risposte

1

Non reinventare la ruota .

Prima di tutto vorrei consigliare l'utilizzo di un gestore di sessioni e un sistema di autenticazione esistenti. nodejs è popolare e ci sono molte librerie che puoi usare. OAuth è un ottimo standard e proteggerà i tuoi utenti.

Detto questo, manca molto da questa lista. Raccomando di leggere il foglio Cheat dell'autenticazione OWASP e Strumento per la gestione della sessione SOWASP . Leggi anche OWASP top 10 poiché molti di questi problemi possono portare a una sessione oa un account compromessi.

Alcuni dei maggiori problemi con il tuo design: usa HTTPS per la durata della sessione , non crittografare mai le password, devono essere sempre hashed . Inoltre, molti possono sbagliare "crittografia", questa non è una bacchetta magica e pochissimi sviluppatori implementano questo correttamente. (Dopo tutto nessuno può crackare la crittografia DOUBLE rot-13, perché è fottutamente "criptata" ... due volte).

    
risposta data 10.08.2013 - 07:40
fonte
2

Is there anything I am missing?

Sì, c'è qualcosa che ti manca. Non ho familiarità con Node.js ma posso garantirvi che esistono implementazioni esistenti di librerie di autenticazione e autorizzazione.

L'utilizzo di una libreria consolidata ti farà risparmiare un sacco di grattacapi quando si tratta di proteggere dai casi limite in modo da semplificare la vita e scegliere una libreria ben controllata e usarla.

    
risposta data 10.08.2013 - 05:33
fonte

Leggi altre domande sui tag