20/11/2020
DEVISE per un approccio alla sicurezza delle applicazioni web
Una delle caratteristiche più importanti di qualsiasi applicazione è la sicurezza, aspetto per cui, negli anni, le aziende informatiche hanno mostrato un interesse sempre maggiore. Nella sua forma più semplice, un’applicazione web deve garantire che un utente sia in grado di registrarsi, accedere e disconnettersi in modo sicuro. Wonderlab, costantemente attenta a queste tematiche, offre di seguito una panoramica degli approcci esistenti in letteratura sul tema.
DUE APPROCCI ALLA SICUREZZA
Nei precedenti articoli abbiamo discusso sia del framework Ruby on Rails che delle sue gemme; al suo interno esistono diversi modi per gestire il tutto: di seguito, analizziamo i due approcci che rappresentano le soluzioni più sfruttate.
Il primo approccio è quello di fare affidamento sul metodo integrato di Rails, has_secure_password, per fornire agli utenti le funzionalità necessarie per registrarsi e disconnettersi in maniera sicura. Tuttavia, il lavoro risulterebbe piuttosto laborioso: sarebbe necessario gestire manualmente le convalide della password e i metodi di supporto collegati a queste ultime.
In aggiunta poi, se l’utente dovesse dimenticare la password, andrebbe gestita la possibilità della sua reimpostazione. Di conseguenza, non è sicuramente veloce né soprattutto semplice analizzare e sviluppare ogni singola possibilità che potrebbe verificarsi.
Sebbene sia importante comprendere i passaggi di base coinvolti nell'autenticazione, una volta fatto, c'è un modo molto più semplice ed ottimale per ottenere le operazioni fin qui descritte.
Ed è proprio questo secondo approccio che descriveremo di seguito, che prevede l'utilizzo della gemma Devise, la quale supporta in maniera completa lo sviluppatore.
DEVISE: UN’AUTENTICA GEMMA
La gemma Devise, è stata sviluppata sia per gestire la situazione descritta in maniera del tutto automatica, sia per fornire i moduli di accesso, iscrizione e una serie di metodi che consentono un’implementazione rapida.
I moduli che meritano sicuramente di essere presentati sono:
- Database Authenticatable: crittografa e archivia una password nel database per convalidare l'autenticità di un utente durante l'accesso.
- Comfirmable: consente l'invio di e-mail con istruzioni che aiuteranno nella verifica di un account.
- Recoverable: questo modulo aiuta nei momenti in cui gli utenti dimenticano la password e devono recuperarla. In questo modo l'utente potrà reimpostare la password.
- Registerable: gestisce la registrazione degli utenti. Consente inoltre la modifica e l’eliminazione degli account.
- Rememberable: consente all’applicazione di ricordare un utente registrato memorizzando un cookie.
- Trackable: tiene traccia del conteggio degli accessi e dell'indirizzo IP.
- Timeoutable: questo modulo è responsabile della scadenza di una sessione che non è stata attiva per un periodo di tempo.
- Validatable: con questo modulo, email e password devono essere convalidate.
- Lockable: fornisce un ulteriore livello di sicurezza; infatti, quando attivato, un account può essere bloccato dopo un determinato numero di tentativi di accesso non riusciti.
Devise offre anche la possibilità, con un ulteriore modulo, di interfacciarsi con sistemi di autenticazione più complessi per lavorare con APIs, come OAuth; in tal modo, si può dare agli utenti anche la possibilità di accedere all’applicazione tramite il login a parti terze come Google, Facebook, GitHub o altre. L’enorme solidità e completezza di questa gemma è affiancata da una configurazione della stessa piuttosto semplice.
INSTALLARE E UTILIZZARE DEVISE
In particolare, per iniziare a sfruttare tutte le potenzialità di base di Devise basta seguire pochi semplici passaggi:
1. Installazione della gemma:
- inserire nel Gemfile dell’applicazione la riga:
gem ‘devise’
- lanciare da terminale, nella directory dell’applicazione, il comando:
bundle install
- e ancora da terminale poi:
rails generate devise:install
2. Creazione del modello User:
- lanciare da terminale il comando:
rails generate devise User
- lanciare la migration col comando:
rake db:migrate
3. Generazione delle viste:
- lanciare ancora da terminale il comando:
rails generate devise:views
4. Generazione di un RegistrationsController che eredita da:
Devise::RegistrationsController
5. Definizione nel controller di quali sono gli attributi permessi, ad esempio:
private
def sign_up
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
def account_update_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation, :current_password)
end
6. Definizione nel file routes.rb del percorso, inserendo la riga:
devise_for :users, :controllers => { registrations: ‘registrations }
Nota: Nel caso si stesse utilizzando invece OmniAuth bisogna cambiare la riga con la seguente:
devise_for :users, controllers: { registrations: ‘registrations,
omniauth_callbacks: ‘users/omniauth_callbacks’ }
e specificare poi la configurazione in config/inizializers/devise.rb:
config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
Quanto spiegato consente di ottenere un’installazione per un utilizzo base della gemma; se si volesse approfondire la conoscenza di Devise o per un uso più personalizzato si può sempre consultare la pagina di rilascio ufficiale.