Sito di Appunti

Com'è nata l'idea

Tutto è partito da una preoccupazione comune: arrivare alla maturità senza avere il materiale in ordine. All'inizio del quinto anno, io e il mio compagno di banco abbiamo deciso di fare le cose per bene e l'idea di un sito di appunti condiviso è sembrata la soluzione più sensata.

Come funziona

Il servizio si basa su un sistema di abbonamenti, principalmente mensile e annuale. Per accedere al servizio l'utente deve creare un account scegliendo un'username e inserendo una password fornita da me, che determina la durata dell'abbonamento. Una volta effettuato l'accesso vengono presentate le materie disponibili.
L'interfaccia di registrazione e di accesso è unica. È stato costruito un sistema in grado di riconoscere automaticamente se si tratta di un account nuovo da registrare, di un account già esistente o di un rinnovo dell'abbonamento nel caso di piani mensili. Questa scelta è stata adottata per non frammentare l'esperienza utente su più pagine, mantenendo al tempo stesso una schermata semplice che richiede poche informazioni.

Il sistema si basa sull'autenticazione tramite JWT firmati, il che garantisce autenticità e integrità del payload.
Nelle prime versioni l'accesso al sito era gestito da un semplice cookie usato come flag: autorizzato o non autorizzato. Questo approccio permetteva a chiunque di manomettere il valore del cookie e accedere al sito senza averne diritto. Il JWT è stato introdotto per risolvere questo problema. Il token viene salvato in un cookie con diverse flag di sicurezza:
  • httpOnly:
    Protegge il cookie dall'accesso tramite API client-side (come document.cookie), riducendo la superficie di attacco per gli attacchi XSS
  • Secure:
    Il cookie viene trasmesso esclusivamente su connessioni HTTPS, prevenendo intercettazioni come gli attacchi Man-in-the-Middle
  • SameSite:
    Controlla se il cookie viene inviato con richieste cross-site, proteggendo da attacchi CSRF

L'utente può trovarsi di fronte a due situazioni ben distinte:
  • Primo accesso:
    L'utente sceglie uno username e inserisce la password fornita da me. Una volta registrato nel database può accedere normalmente al servizio.
  • Accesso da un nuovo dispositivo:
    Dopo aver inserito username e password, l'utente si ritrova in una schermata di attesa: il nuovo accesso deve essere autorizzato manualmente. Questo meccanismo serve a impedire che le password vengano condivise con terzi per ottenere accesso non autorizzato al servizio.
    Al momento dell'accesso vengono registrate nel database alcune informazioni sul dispositivo, come le dimensioni dello schermo e lo User Agent. Questi dati permettono di verificare chi sta effettivamente cercando di accedere, rendendo semplice distinguere un accesso legittimo da uno sospetto.
Il JWT è strettamente legato allo stato dell'abbonamento: la sua scadenza coincide con la data di fine validità del piano, garantendo che l'accesso venga revocato automaticamente senza necessità di controlli aggiuntivi sul database.
Visita la pagina