La corretta gestione delle sessioni e il controllo dell'accesso a livello di funzione è un punto molto importante nella sicurezza web ( Scopri Gestione della sessione OWASP e Controllo di accesso a livello di funzione ).
Assicurati sempre che i token di sessione siano realmente validi solo per le azioni che un determinato utente può eseguire. E solo per quel determinato utente.
Questo è un grosso problema e il 99% di tutti i siti Web che ho provato finora erano vulnerabili agli attacchi che si sono evoluti intorno a questo. Per esempio. quando i token possono essere utilizzati per eseguire azioni, l'utente attualmente connesso non dovrebbe essere in grado di farlo. Come: sostituzione di un ID in una richiesta con l'ID di un altro utente (o record). Sareste sorpresi di quanto spesso questo metodo estremamente semplice funzioni per ottenere informazioni personali di altri utenti!
- Tutti gli URL sono accessibili solo agli utenti con determinati privilegi.
- Gli utenti non dovrebbero essere in grado di aggiungere semplicemente campi a una richiesta. Buon esempio: ho già visto più siti Web / app, dove è stato possibile dirottare altri account utente semplicemente aggiungendo un campo "email" nel modulo in cui ogni utente può modificare le proprie informazioni sul profilo.
- Assicurati che il tuo modo di concedere ruoli agli utenti / agli amministratori sia sicuro e che gli utenti non possano concedere loro stessi privilegi / ruoli aggiuntivi.
- I moduli di reimpostazione della password sono spesso anche un buon punto di accesso per gli aggressori, e lo sono solo per inviare spam ad altri utenti.
Le sessioni devono essere distrutte alla disconnessione / modifica della password e non essere riutilizzate in qualsiasi momento.
A parte questo, dovresti anche preoccuparti della divulgazione di informazioni (quando un utente malintenzionato applica errori, ad esempio con richieste HTTP o metodi -metali non validi, come OPZIONE invece di OPZIONI).
E, naturalmente, assicurati sempre che il tuo sito web utilizzi solo le librerie più aggiornate (javascript, moduli server e così via).
Non divulgare mai alcuna informazione sensibile - ad es. assicurati che i token di sessione non vengano mai trasmessi tramite richieste GET.
Assicurati inoltre che il tuo server permetta solo determinati metodi HTTP (ad esempio non consentire "TRACE").
Convalida dell'input: protegge tutti i moduli di caricamento file, sono molto vulnerabili. Per esempio. carico utile nel nome del file. Ho anche visto spesso che la dimensione massima del file è stata convalidata solo sul lato client.
Utilizza i captcha quando necessario e assicurati che non possano essere aggirati a causa di una cattiva implementazione.
Ultimo ma non meno importante, dovresti anche preoccuparti dei reindirizzamenti aperti.
In realtà ci sono molte cose di cui dovresti preoccuparti. Iniezione per esempio: non c'è solo l'iniezione SQL, ma anche l'iniezione di Javascript è un rischio elevato per la sicurezza della tua applicazione. Succede più spesso di SQL-injection, di gran lunga.
Potrei andare avanti con questa lista per un po ', ma ti suggerisco di dare un seguito leggendo alcune checklist come questa: link