Come proteggere i nomi utente e le password del database MySQL all'interno di un file php? [duplicare]

3

Sto lavorando su un sito Web PHP e le mie ricerche hanno dimostrato che è del tutto possibile che il server possa essere compromesso e che i file PHP possano essere esposti. Memorizzo il nome utente e la password di MySQL DB all'interno dei file PHP sotto forma di costanti, che viene quindi utilizzata durante la creazione della stringa di connessione.

define("HOSTNAME","hostname.com:2086");
define("DBNAME","databasename");
define("DBUSER","databaseusername");
define("DBPASS","databasepassword!");

/* Defining DB Handler */
try{
    $DBH = new PDO("mysql:host=".HOSTNAME.";dbname=".DBNAME, DBUSER, DBPASS);
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $DBH->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
catch(PDOException $e){
    echo $e->getMessage();
}

Se, in ogni caso, i file PHP vengono esposti, ciò causerebbe anche il rischio che il database e il suo contenuto siano a rischio. Sto sbagliando? C'è un modo migliore per garantire la sicurezza del database anche se i file PHP vengono esposti?

    
posta BlackPanther 25.05.2015 - 13:28
fonte

4 risposte

4

Un buon modo per proteggere le tue chiavi è mettere il file php con le credenziali al di fuori del webroot.  Anche quando i file php "raw" vengono poi offerti a un client, nessuno di essi include le credenziali del database. (non protegge da qualcuno con accesso ai file sul server).

Un'altra misura difensiva che puoi prendere è limitare le connessioni da cui il Database accetta le connessioni. (quindi non tutto il mondo ma solo un elenco selezionato di specifici ip)

Infine, dovresti fare in modo che l'account che si collega al Database abbia solo i diritti sul proprio database, e nessun altro!

    
risposta data 25.05.2015 - 13:40
fonte
4

Difesa in profondità è la parola chiave: anziché limitarsi a garantire le credenziali, assicurarsi che anche conoscendo le credenziali sia (quasi ) inutile per un aggressore.

Questo significa che usi un utente con i privilegi minimi richiesti ( principio dei privilegi minimi ) e restrict accesso con quell'utente solo dal server web. Quindi non importa dove si mantengono le credenziali poiché l'unico modo per sfruttare le credenziali di un utente malintenzionato è dal server Web, il che significa che richiede l'esecuzione di codice / comando sul server web. E in tal caso sei già condannato.

    
risposta data 25.05.2015 - 14:27
fonte
0

Quello che farei, oltre alle misure menzionate nelle altre risposte, è di leggere il nome utente / password da un file per essere recuperato dal server web e di avere questo file esplicitamente nella blacklist per tutti tranne il server stesso.

    
risposta data 25.05.2015 - 16:03
fonte
0

Puoi inserirli in variabili d'ambiente.

Oltre ai piccoli vantaggi di sicurezza, offrono molteplici vantaggi per il tuo flusso di lavoro di sviluppo, come non dover toccare i file PHP e inserire credenziali diverse ogni volta che vuoi lavorare su un ambiente di sviluppo diverso. Invece, l'ambiente fornisce queste informazioni e hai solo una singola app che si adatta automaticamente a qualsiasi posizione in cui è distribuita.

    
risposta data 25.05.2015 - 16:33
fonte

Leggi altre domande sui tag