2012-01-31 16 views
7

Conosco la regola: mai hardcode la tua password, e ho visto questa domanda here che spiega cosa fare con Java e mySQL, ma non so cosa fare per PHP e mySQL.Come posso proteggere una stringa di connessione mySQL in PHP?

La stringa di connessione corrente è fatto in questo modo

<?PHP 

$DBName = "dbName"; 
$Host = "localhost"; 
$User = "dbUser"; 
$Password = "Yikes_hardcoded_PW"; 

$Link = mysql_connect($Host , $User , $Password , $DBName); 

if (!$Link) { 
    die('Could not connect: ' . mysql_error()); 
} 

?> 
  • ma ho bisogno di avere la password protetta, cioè non hardcoded in questo file. Come lo faccio?

EDIT: Per tutti i downvotes ho salire su questo, non ho ancora ricevuto una risposta alla domanda che è circa un vero e proprio problema di sicurezza - le password hardcoded. Non è utile diminuire il voto su una domanda vera senza pubblicare un commento o una risposta che soddisfi la domanda.

+2

bene, non inserire una password nel codice. Se è open source, nessuno ha bisogno della password comunque –

+2

mettilo in un file di configurazione separato e ignoralo in GIT – Bogdan

+0

Puoi mettere la password in un file separato come Bogdan suggerito e gitignarlo per scopi di sviluppo. Per lo sviluppo in realtà potrebbe essere più semplice mantenere la password in dsn. Da che parte dipende il tuo livello di comfort. Per la produzione, mantenere le password nella casella di produzione in cui verrà eseguito il codice. Limita l'accesso alla casella e gestisci le password impostate/ripristinate tramite chef, marionette, tessuto ecc. – dminer

risposta

-2

Non vi è alcun motivo per nascondere la password MySQL. Limita semplicemente l'accesso al database dall'host remoto. In alternativa, puoi impostare un utente MySQL predefinito senza password per questo specifico progetto/host/database/azione.

Per rispondere direttamente alla tua domanda, non c'è modo di nascondere la password.

+0

Non nascondendo una password sembra volare di fronte alla saggezza accettata. Non stavo nemmeno chiedendo che la password fosse nascosta, ma solo protetta. – T9b

+0

@ T9b, utilizzare l'utente predefinito quindi, senza password. Ma poi di nuovo, non c'è motivo di nascondere la password di MySQL se l'accesso remoto è limitato, ad es. vedi http://www.opensourcecms.com/ alcuni dei CMS ospitati consentono di modificare le impostazioni del DB, l'utente è anche in grado di vedere la password e sono perfettamente a conoscenza di ciò. – Gajus

1

Memorizza le tue configurazioni in un altro file.

$DBName = "dbName"; 
$Host = "localhost"; 
$User = "dbUser"; 
$Password = "Yikes_hardcoded_PW"; 

Setup git ignore per questo file di configurazione.

+1

Le configurazioni sono in un altro file e sì git può ignorare i file, ma questo non risponde alla mia domanda. – T9b

-1

Non c'è necessariamente un problema con le credenziali di codifica in un file di configurazione.

Per un progetto con codice sorgente, è consigliabile creare un modello di configurazione con segnaposto per tutte le credenziali che si impegnano nel repository.

In qualsiasi distribuzione, è necessario modificare questi segnaposto affinché siano la verifica delle credenziali in tempo reale. Questo aiuterà anche chiunque usi il tuo progetto se lo stai per aprire.

aggiornamento (effettivamente rispondere alla domanda)

configurazione

Database davvero ha bisogno di essere in formato testo, hardcoded in un file PHP, ma che fai può qualche cosa per assicurarsi che sia più sicuro:

  1. Controllare la configurazione di Apache l'open_basedir limita altri casi vhost da file di accesso al di fuori del web root
  2. Controllare il permesso filesystem per assicurare che solo Apache e l'utente può accedere al file
  3. Assicurarsi che l'utente mysql è impostato solo per essere valida da un contesto localhost, cioè grant all privileges on mydatabase.* to [email protected] ecc
  4. utilizzare un firewall per bloccare le connessioni esterne a mysql
+0

La domanda non riguarda l'aspetto della versione, ma la protezione della password in qualche modo per l'utilizzo con PHP. Puoi darmi un esempio che risponda alla domanda? – T9b

+0

Assicurati che le autorizzazioni del filesystem siano corrette e questo è tutto ciò che conta davvero. Finché solo tu e apache puoi accedervi, dovrebbe andare bene. Assicurati anche che la tua configurazione su base aperta in apache sia corretta. Inoltre, se il tuo mysql crea una dichiarazione utente specificata solo utente @ localhost sarà ancora più sicuro –

1

dovrete codificare la password da qualche parte o altro. Anche se si desidera utilizzare i DSN, è necessario codificare la password nella stringa DSN. Per come la vedo io non si può evitare di codificare la password.

Quindi la domanda si riduce a ciò che si può fare per proteggere il file/stringa contenente la password. L'impostazione delle autorizzazioni appropriate per il file system per il file contenente la password e l'impostazione del valore open_basedir appropriato è ciò che puoi fare. Come menzionato in uno dei post di What's best way to secure a database connection string?, potresti anche considerare l'utilizzo della partizione crittografata.

Il link che hai postato nella tua domanda, per quanto ne so, parla di applicazioni desktop. E le applicazioni desktop in PHP sono troppo poche per riflettere seriamente sulla questione della protezione delle password dei database per le applicazioni desktop php.

1

Anche io sto facendo ricerche su questo argomento. Il permesso file è una delle strategie ma ci sono tanti vettori.

Ma diciamo che in uno scenario si ha accesso FTP o SSH al server e qualcuno compromette l'accesso FTP. Questo login è lo stesso per la cartella public_html dell'account utente. Quella persona potrebbe navigare e leggere questi file. Praticamente a questo punto è male. Tuttavia, potresti avere una configurazione sul sistema in cui tieni solo l'utente nella sua home directory.

Forse è possibile creare una cartella .private su un livello esterno alla home directory dell'utente. Quindi nei file php per quell'utente, che ha i suoi script nel public_html, includere un file di connessione che esiste nella cartella .private (../../.private/connect.php per esempio).

Non so se questo funzionerà se l'utente è in prigione, ma questo tipo di sicurezza sembra una cosa attraverso l'oscurità.

1

Costruire su ciò che Cajus Kuinzinas ha eluso a ... Considerare di avere un database limitato che memorizza le credenziali dell'applicazione. All'avvio dell'applicazione, eseguire una query utilizzando un account di sola lettura in grado di ricercare le credenziali nel database dell'applicazione corrente.

Per rendere più sicuro, il valore memorizzato nel database di ricerca non deve essere la password completa. La tua applicazione potrebbe hash questo valore insieme a un sale per generare la vera password. Inoltre, è possibile memorizzarlo nella cache, se lo si desidera, per ridurre i colpi futuri.

Problemi correlati