Wanted: strategia di accesso / autenticazione sicura per sito Web con AND senza JavaScript nel 2018

2

Sto cercando di capire una strategia per l'autenticazione sicura - senza re-inventare la ruota, ma anche considerando i vincoli specifici della mia situazione. La strategia non dovrebbe essere legata a un particolare framework, anche se sto guardando un server node.js con un'API REST, che serve un'app web angolare e supporta anche il rendering lato server / Angular Universal, se questo è importante.

Ciò che potrebbe essere specifico della mia situazione è che mi piacerebbe supportare gli utenti che consentono tutte le funzionalità sul loro lato, così come gli utenti con un browser molto limitato - potenzialmente JavaScript e cookie disabilitati. Ho pochissimo controllo su questo. (Lo so, potremmo iniziare a discutere su questo: è il 2018 e JavaScript non è così male, ma non ho alcun controllo sugli utenti, o non controllano nemmeno loro stessi, ma è il loro dipartimento IT, ... ). Questo sembra complicare le cose. Immagina i seguenti scenari: Un utente accede al sito Web e ottiene prima un HTML reso lato server. Quindi,

  1. in una seconda fase, l'app web completa (ad esempio angolare) viene scaricata e sostituisce la pagina pre-renderizzata con l'app. D'ora in poi, eseguiremo un'app Web
  2. l'utente ha disabilitato JavaScript o il browser è troppo vecchio, ecc., quindi l'HTML rimane. L'utente userebbe il sito web usando HTML reso server

Possiamo anche supporre che il server usi https / ssl. Almeno qui, ho il pieno controllo. Al momento non ho bisogno di supporto per l'autenticazione esterna / di terze parti o un server di autenticazione separato.

In generale, mi sono imbattuto nelle seguenti strategie:

  • Autenticazione di base tramite https.
    • Pro: non richiede nulla sul lato client
    • Con: potrebbe non essere completamente sicuro
  • Dopo l'autenticazione, il server emette un token (ad esempio JWT o qualche altro token) che viene memorizzato come cookie con i flag "HttpOnly" + "Secure" per impedire che venga rubato tramite XSS. Per impedire anche XSRF / CSRF, il server emetterebbe un token XSRF che il client (app) deve allegare per provare l'origine della richiesta
    • Pro: sembra essere molto sicuro
    • Con: richiede JavaScript e cookie. Gli utenti che disabilitano uno o l'altro sono bloccati
  • Dopo l'autenticazione, il server emette un token (ad es. JWT o qualche altro token) che è archiviato in LocalStorage e l'app client deve collegarlo ad ogni richiesta. È necessario assicurarsi che nessun attacco XSS sia possibile per impedire il furto del token.
    • Pro: sicuro se è possibile prevenire XSS. Non richiede cookie.
    • Con: richiede un'app JavaScript per eseguire, archiviare e allegare il token. Gli utenti che disabilitano JavaScript sono bloccati.

Nel complesso, non ho visto una strategia sicura che funzioni bene senza JavaScript. Mi sto perdendo qualcosa? Sarebbe ok se il client web-app (JavaScript) usasse una strategia Token + LocalStorage o Cookie e fallback su Basic Auth per il client solo HTML? Altre idee?

    
posta user1211286 13.03.2018 - 13:17
fonte

0 risposte

Leggi altre domande sui tag