Password e nome utente utilizzati per connettersi al database nel codice sorgente [duplicato]

0

Negli script PHP che comunicano con il database ho il nome utente e la password nel database in testo semplice, cioè mysqli_connect('localhost:3306', 'root', 'PASSWORD!') . Da OWASP

Do not include any credentials in your source code, including (but not limited to) usernames, passwords...

Come può essere protetto? Inoltre come adesso ogni script ha lo stesso codice per la connessione al database, quindi sto pensando di creare uno script (base.php) e includerlo in everypage che interroga il database. Va bene o è un rischio per la sicurezza? Se la mia descrizione non è chiara, sto fondamentalmente pensando di copiare ciò che fa Cameron Laird con base in questa domanda .

    
posta Celeritas 06.06.2013 - 00:40
fonte

3 risposte

6

Il prossimo paragrafo è la chiave:

Such constants belong in properly protected properties or configuration files.

Devi definire le credenziali username / password come variabili in un file separato, ad esempio db_config.php . Questo file di configurazione dovrebbe quindi essere incluso da qualsiasi file di codice sorgente PHP necessario per utilizzarli per la connessione al DB.

Questo file di configurazione dovrebbe avere le autorizzazioni impostate in modo che il pubblico generale non possa leggerle e dovrebbe essere escluso dal controllo della versione del codice sorgente in modo che non venga controllato.

L'obiettivo di base è che le informazioni sensibili siano contenute in un unico punto che non fa parte del codice sorgente principale.

Questo non significa che le credenziali non saranno in un file accanto al codice sorgente, e non significa che il file di configurazione non può essere un file PHP.

    
risposta data 06.06.2013 - 00:57
fonte
2

Idealmente li inseriresti in un file di configurazione che non è accessibile al web, ma è accessibile all'utente che esegue il motore PHP. In questo modo, chiunque acceda al sito non può accedere direttamente alla configurazione, ma gli script che devono essere eseguiti sono in grado di raggiungerlo.

    
risposta data 06.06.2013 - 01:39
fonte
0

Dovrebbe essere in un repository di configurazione di qualche tipo, uno che è modificabile in fase di esecuzione senza riferimento al codice sorgente. Per lo meno, i codici possono essere modificati rapidamente e uniformemente, e gli ambienti separati per test e sviluppo non hanno bisogno di accesso alle informazioni dell'account e della password dal vivo.

In definitiva, ovviamente, il segreto su come accedere al database deve essere nel programma e potrebbe essere decodificato da qualcuno con accesso a programma. È possibile avvolgere il segreto in più livelli (ad esempio da crittografando le informazioni di configurazione) ma deve ancora essere lì da qualche parte.

    
risposta data 06.06.2013 - 00:57
fonte

Leggi altre domande sui tag