Le minacce più importanti sono quelle che tentano di accedere al back-end, come il database. SQL injection è in cima alla lista; il controllo che devi fare è assicurarti che l'input dell'utente non sia direttamente inserito nella stringa per una query dinamica; l'input dell'utente è tutto ciò che viene dal client; anche se l'utente non è in grado di modificarlo nel modulo o sul browser, immagina di poter intercettare il traffico lasciando il browser e iniettare qualsiasi cosa in qualsiasi campo. Quindi tieni sempre presente: "non fidarti dell'input proveniente dal client".
Quindi non fidandosi dell'input dell'utente, ora devi convalidare ogni input; per l'iniezione SQL, è necessario eliminare qualsiasi carattere non accettato; ad esempio, se si suppone che l'utente cerchi un numero, non accettare nulla tranne una combinazione di 0-9 per una certa lunghezza; rimuovi il resto e inseriscilo nella query. È una buona idea evitare del tutto le query dinamiche e utilizzare query parametrizzate e stored procedure nel database.
Il prossimo attacco superiore è un'iniezione che può essere indirizzata ad altri utenti; come XSS. La storia con XSS è simile all'iniezione SQL, non dovresti fidarti dell'input dell'utente e fare una validazione nella whitelist dopo aver ricevuto qualsiasi input. In generale, i controlli lato client assicurano che il formato che l'utente ha digitato i dati non sia sufficiente e che tutto debba essere ricontrollato sul lato server.
Devi prestare particolare attenzione alla parte di autenticazione; il nome utente e la password sembrano una funzionalità semplice; non è. È necessario accertarsi che all'accesso eseguito correttamente venga generato un nuovo valore di sessione e impostato sul cookie del cliente. È inoltre necessario assicurarsi che per il resto del tempo l'utente abbia effettuato l'accesso, questa sessione non sia esposta tramite HTTP; cioè, devi andare su SSL. La sessione deve essere casuale, abbastanza lunga e non immaginabile. La maggior parte dei linguaggi di programmazione può prendersene cura; non reinventare la ruota. Assicurati che la sessione abbia i flag Secure e HTTPSolo impostati; e assicurarsi che sia scaduto dopo un periodo di inattività o una disconnessione manuale. La reimpostazione della password e il cambiamento sono anche funzionalità molto sensibili; che ha bisogno di un lungo post da discutere.
Una parte molto importante è l'autorizzazione. Una volta che un utente è autenticato, ciò non significa che tu abbia finito; ogni utente deve accedere solo a determinate pagine o dati; quindi ogni richiesta deve essere controllata sul lato server per prevenire l'escalation dei privilegi.