Dove deve essere gestita l'autenticazione, nel codice del server o nel codice lato server dell'applicazione?

0

Sto sviluppando una semplice applicazione web in node.js. Gli utenti possono accedere da qualsiasi pagina nell'applicazione, quindi gestisco l'autenticazione nel codice e nella logica del server e i controlli del codice lato server dell'applicazione per verificare se sono impostate due variabili di sessione. Se lo sono, l'applicazione continua con informazioni specifiche dell'utente.

Non sono sicuro se questo è il modo migliore per gestire la logica di autenticazione. Devo spostare completamente tutta l'autenticazione sul codice dell'applicazione e solo il server ascolta e inoltra le richieste, oppure, poiché il server sta impostando la sessione in ogni caso, dovrei controllare la logica di autenticazione del back-end mentre sto gestendolo ora ?

Alla fine, quello che sto veramente chiedendo è: concettualmente, dove dovrebbe essere gestita l'autenticazione? Nel codice del server o nel codice lato server dell'applicazione?

Modifica: per essere più specifici, è un'applicazione pubblica su Internet. La logica che sto interrogando è interamente la logica lato server . Grazie per avermelo fatto notare. Ho modificato il mio titolo per renderlo un po 'più accurato.

    
posta Nathan Lutterman 14.05.2013 - 18:35
fonte

3 risposte

3

In primo luogo, è bene che non si stia prendendo in considerazione l'autenticazione lato client in quanto può essere falsificato.

I problemi principali che vedo con l'utilizzo dei meccanismi incorporati del server per l'autenticazione sono:

  1. Portabilità: spostare la tua applicazione su un server diverso diventa molto più difficile.

  2. Una mancanza di separazione tra gli utenti di server locali e gli utenti di applicazioni Web remote, quando l'elenco degli utenti potrebbe rendere più difficile la gestione del server e dell'applicazione.

  3. Se la tua applicazione è compromessa, hanno già ottenuto l'accesso a livello utente al tuo server. Non mi dispiacerebbe scommettere che questo è significativamente meno sicuro rispetto all'utilizzo di metodi di autenticazione separati.

Raccomando di fare l'autenticazione della tua applicazione web, magari usando una libreria gestita dalla comunità o costruendola tu stesso. Memorizza i tuoi utenti in una tabella di database.

Questo supera gli svantaggi elencati.

Non consiglio l'uso di meccanismi di autenticazione di altri siti. Le ragioni sono molte, ma per citarne alcune sono:

  • Il tuo visitatore potrebbe non voler avere un account con il sito di terze parti.
  • È una pratica scadente avere un nome utente / password per ogni cosa e questo metodo lo sta essenzialmente facendo, ma con una faccetta che fa pensare alla gente che sia ok.
  • Il risultato è dare troppe informazioni al sito di terze parti (che ne condivide gran parte con altri siti che usano il loro meccanismo di autenticazione).
  • La lista è infinita. Potrei aggiungerlo tutto il giorno!
risposta data 15.05.2013 - 03:43
fonte
6

Quando dici "logica dell'applicazione web" intendi sul lato client, nel JavaScript sul browser del cliente? Se è così, la risposta è semplice. Non ti puoi fidare di ciò che accade sul browser del cliente, o anche che il client stia utilizzando un browser. Potrebbe essere uno strumento di hacking che rende think il codice in esecuzione in un browser. Diamine, alcuni browser standard ti permettono anche di modificare JavaScript in una pagina caricata.

Puoi eseguire controlli sul lato client per fornire un rapido feedback da parte dell'utente. Ma ogni reale vincolo di sicurezza deve essere applicato sul server, anche se questo a volte significa duplicare il codice.

I tuoi "paio di campi" sono i tuoi token di accesso. Se li memorizzi nei cookie, questi token devono essere creati sul server in modo crittograficamente sicuro in modo che qualcuno (o qualche script) non possa indovinarne uno in pochi milioni di tentativi. Spero che ti aiuti.

    
risposta data 14.05.2013 - 18:46
fonte
6

Ogni volta che ti affidi a qualsiasi cosa provenga dal client, può essere falsificato. Sicuramente vuoi fare una sorta di hashing con una sorta di "sale" lato server che viene memorizzato in modo sicuro sul server in modo da poter cifrare / decifrare i token di convalida del client senza fare affidamento su nulla "originato" dal client.

    
risposta data 14.05.2013 - 18:48
fonte

Leggi altre domande sui tag