2011-11-01 10 views
5

Prima di tutto, se c'è un duplicato esatto - non ne ho trovato, quindi mi scuso se la risposta è già stata fornita.Protezione delle credenziali di accesso al database (MySQL) in un'applicazione Web (stack LAMP)

Presenterò il problema che sto affrontando, sperando di ottenere qualche intuizione o una semplice risposta "non possibile".

Come proteggere le credenziali del database in un'applicazione Web nel caso in cui il server in cui viene compromesso PHP? Supponiamo che nel caso di questo problema non si parli di hosting condiviso, VPS o altro, c'è solo una persona che ha accesso alla casella che memorizza le informazioni di MySQL.

Il server MySQL si trova in un'altra casella (remota) e consente le connessioni solo da un intervallo di indirizzi IP (associati alla casella PHP).

Come garantire che l'utente malintenzionato non sia in grado di ottenere i dettagli necessari per la stringa di connessione per MySQL? Supponiamo che l'utente abbia infranto il login di root della Linux box che esegue PHP.

Quali passi intraprenderei per fornire la massima sicurezza in termini di accesso alle informazioni necessarie per stabilire una connessione MySQL in questo caso?

Grazie per aver letto e commentato in anticipo.

+0

Questo argomento è stato già trattato qui - http://stackoverflow.com/questions/3710511/best-way-to-connect-to-mysql-with-php-security – hafichuk

+0

@hafichuk - il collegamento fornito suggerisce alcune parti di garantire l'accesso, con la migliore risposta crittografando il file con la password.Tuttavia, se qualcuno è una radice, nulla impedisce loro di modificare il codice PHP e di echeggiare le credenziali. Mi chiedo se qualcuno abbia un metodo migliore per stabilire la comunicazione tra server app e server db come la crittografia a chiave pubblica o simile in cui il server db è coinvolto nella negoziazione prima di consentire la connessione. – Furicane

risposta

2

La soluzione migliore qui, se questa è una priorità principale, sarebbe quella di utilizzare stored procedure.

Le stored procedure memorizzano le query del database all'interno del database, quindi le impostano e creano un nuovo utente MySQL con autorizzazioni di esecuzione della stored procedure appena memorizzate. In questo modo, anche se il codice dell'applicazione fosse stato compromesso, sarebbero stati in grado di manipolare solo un sottoinsieme limitato di dati e inoltre non avrebbero acquisito alcuna conoscenza della struttura del database sottostante.

I negativi di questo approccio sono la manutenibilità, a causa del fatto che la tua logica di applicazione di mixaggio con il tuo sistema di archiviazione, e potrebbe non essere portatile attraverso piattaforme.

Se si desidera una soluzione semplice, ciò che hafichuk suggerito potrebbe essere migliore, è sufficiente personalizzarlo in base alle proprie esigenze. Sfortunatamente il tuo script deve essere in grado di accedere al database, a meno che il tuo server web e il server delle applicazioni non siano su macchine separate e comunicate tramite un canale crittografato come SSH, ma il tuo diventa troppo complicato. Dipende tutto dall'importanza della protezione per te, e fino a che punto sei disposto ad assicurarti.

1

Sfortunatamente, il codice PHP avrà il nome utente e la password del proprio sistema mysql in testo semplice. Il mio suggerimento è di limitare i privilegi di quell'utente del database (si sta utilizzando un utente del database diverso da root, spero).

Vedere http://dev.mysql.com/doc/refman/5.5/en/adding-users.html. Se stai utilizzando phpmyadmin o un'altra interfaccia utente, puoi limitare i privilegi degli utenti in questo modo.

In genere, in genere si desidera concedere solo SELECT, UPDATE, INSERT e DELETE all'utente mysql, a meno che l'app non abbia bisogno di altri privilegi.

Oltre a ciò, si spera che qualcun altro possa offrire una soluzione migliore.

+0

Grazie per la risposta, ma l'obiettivo è di limitare l'utente a non avere difficoltà o ad accedere al database. Anche la lettura dal db è considerata una violazione, quindi il livello di violazione è lo stesso che se qualcuno ha cancellato o lasciato cadere l'intero set di dati. – Furicane

Problemi correlati