In sostanza, significa che è necessario memorizzare nome utente e password nel database in una directory a cui il server Web non può accedere direttamente. Ad esempio, se si utilizza PHP e la configurazione di Apache punta a /project-root/www
, è possibile memorizzare le informazioni di accesso in /project-root/config/db.php
; se lo memorizzi, ad esempio, /project-root/www/config/db.php
. Supponendo che la configurazione del server non sia interrotta, ciò significa che non è possibile accedere a db.php su Internet.
Hai anche bisogno di ottenere le autorizzazioni per il file di configurazione giusto. L'account su cui gira il server web (idealmente un account dedicato per la tua applicazione) dovrebbe essere l'unico con qualsiasi tipo di accesso al file di configurazione. In un ambiente UNIX, supponendo che Apache sia configurato per eseguire l'host virtuale dell'applicazione con il proprio account, 600 o anche 400 è un set di autorizzazioni adatto. Ciò garantisce che altri utenti con accesso alla stessa macchina (tranne root) non possano leggere il file di configurazione.
Inoltre, vorrai prendere qualche altra misura di sicurezza:
- Creare un utente di database appositamente per l'applicazione e assegnargli le autorizzazioni sufficienti per svolgere il proprio lavoro (SELECT, UPDATE, INSERT e DELETE sulle tabelle di cui ha bisogno in genere è sufficiente). Non fornire all'utente alcuna autorizzazione su altri database: se la tua applicazione è compromessa, puoi almeno mitigare il rischio per altri database. Se l'utente dispone anche di autorizzazioni sui database di sistema, un utente malintenzionato può aumentare le autorizzazioni creando nuovi utenti tramite le tabelle di sistema e concedendo loro più autorizzazioni. In particolare, non utilizzare mai mai account di database amministrativi per siti Web di produzione.
- Utilizza una password complessa. Dal momento che non dovrai digitare manualmente molto la password, una sequenza di, diciamo, 32 byte casuali, convertiti in base64, dovrebbe fare una buona password.
- Se il database viene eseguito sulla stessa macchina del server Web, configurarlo in modo da rifiutare le connessioni da qualsiasi posizione tranne localhost. Se viene eseguito su un server dedicato, utilizzare una whitelist di host consentiti e posizionare il tutto dietro un firewall configurato correttamente.
- Se si utilizza un linguaggio quasi interpretato come PHP (dove il codice sorgente si trova sul server Web), è consigliabile scrivere la configurazione anche come codice sorgente e utilizzare un'estensione di nome file appropriata. In questo modo, se qualcuno riesce a richiedere il file di configurazione su Internet, verrà eseguito e produrrà una pagina vuota, nascondendo comunque le credenziali del database dall'attaccante (questa è un'ultima goccia, però, non dovresti mai fare affidamento solo su questo) .
Ovviamente, devi controllare la tua applicazione per i difetti di sicurezza generali, in particolare l'iniezione SQL e l'attraversamento del percorso: questi sono i modi più comuni per accedere al tuo database.
Se l'applicazione è davvero sensibile, è necessario prendere ulteriori precauzioni, come la crittografia dei file di configurazione, ma per il sito web medio di basso profilo, questo dovrebbe fare la differenza.