Sto realizzando un sito più grande per la prima volta, quindi la sicurezza conta davvero, a differenza delle mie schede davvero pessime con forse 10 utenti. Quindi volevo chiedere se il modo in cui sto facendo è abbastanza sicuro per un'applicazione semi-grande in cui sono coinvolti i soldi.
Il sito è scritto in PHP, il database è MySql. Questo è il login corrente.
Prima di tutto, ho un long key di 128 caratteri e una session key salvati nella configurazione locale.
Su ogni sito che interagisce con le sessioni (ad esempio il pannello di controllo utente) ho questo frammento all'inizio del codice:
session_start();
if (empty($_SESSION)) {
session_regenerate_id(true);
}
Dopo che mi collego al database, sfuggi tutte le stringhe e leggi i dati.
Dopo di ciò, confronto le due password che ho ottenuto con SHA-512 e il sale di prima:
public static function hashValue($str) {
for ($x = 0; $x < 10000; $x++) {
$str = hash('sha512', $str . self::$salt);
}
return $str;
}
Se tutto è corretto, $_SESSION[$sessionkey]
viene impostato con l'ID utente dal database (anche se la chiave della sessione lunga non dovrebbe essere necessaria perché il client non può cambiare localmente il $_SESSION
vars, IIRC. )
Se il sito è protetto (come in, gli utenti non loggati non hanno accesso) questo codice viene chiamato per reindirizzare nuovamente all'indice se non sono loggati:
if (!isset($_SESSION[$sessionkey])) {
header("Location: ?view=default");
exit;
}
Questa applicazione è sicura? Ho letto da qualche parte che è meglio avere un sale generato a caso per ogni utente, salvato nel database. E 'davvero necessario, considerando che previene solo un po' meglio il brute forcing, che comunque non dovrebbe essere un problema con un captcha?