Domanda

Sto usando PHP e MySQL. Ho un file di configurazione del database (db-config.php) che ha il mio nome di database, nome utente e password. Il mio archivio di file di configurazione DB e DB su: www (httpdocs) /pp/db-config.php

È sicuro? Altri/hacker sono in grado di rubare il mio file e ottenere le informazioni di accesso al mio database?

O dovrei metterlo fuori dalla cartella WWW, ad esempio: DB-config.php negozi nella cartella dello stesso livello WWW (HTTPDOCS). Quindi in 1 della mia app, lo faccio solo:

include_once('../../db-config.php');

Funzionerà? Intendo saltare 2 livelli fino alla cartella root/www/httpdocs ??

Hai altro modo sicuro per archiviare la password del database ??

È stato utile?

Soluzione

Molti software PHP scaricati pubblicamente di solito dispongono del file di configurazione con password DB in una directory nella cartella root WWW e fintanto che il server è configurato correttamente, dovrebbe essere OK.

La cosa migliore da fare per qualsiasi informazione sensibile come un file di configurazione con password è comunque archiviare fuori La root del documento (una cartella in alto è la pratica standard) ed è ciò che consiglierei.

Puoi anche pre-crittografare la password prima di salvarla nel tuo file di configura I tuoi file sarebbero in grado di decrittografare la password memorizzata abbastanza facilmente).

Altri suggerimenti

Spero che la password non sia stampata sullo schermo, ma è comunque meglio avere in directory non direttamente accessibile attraverso il Web, sì. È anche una buona idea per la tua app Web utilizzare un accesso con le autorizzazioni minime necessarie.

Eseguo le mie app web in una prigione di Chroot, il che significa che finisco per connettermi su una connessione TCP locale anziché tramite una presa (ad esempio, uso '127.0.0.1' invece di "localhost") poiché la presa UNIX non può essere visto dall'interno della prigione.

Nessuno può vedere il codice sorgente dei tuoi file .php, la password è sicura ovunque lo posiziona, specialmente se lo tieni nella cartella del tuo sito Web (che hai il controllo completo), il peccato che non lo inserisca nella cartella Public_FTP. ..

Forse puoi posizionarlo a un livello sopra la cartella public_html, proprio nel caso [estremo] che qualcuno rovina l'HTTPD.conf e il PHP smette di funzionare, quindi le fonti verranno rivelate.

Se hai abbastanza controllo sul server Web, ti consiglio di aggiungere una directory a PHP include_path direttiva. Quindi, puoi dire qualcosa di simile:

in php.ini

include_path=/home/xxxx/php_includes:blah.blah.blah

in/home/xxx/php_includes:

create a directory named "config"
create a file named "config/database_config.php"

Nei tuoi file PHP:

include_once("config/database_config.php")

Facile da includere e in modo sicuro al di fuori della root web.

MODIFICARE:

Puoi farlo in fase di esecuzione con il set_include_path comando. Inoltre, se stai usando Apache, penso che puoi impostare questo per una directory posizionando le direttive PHP_ADMIN_VALUE in un file .htaccess (vedi Documentazione PHP)

Sì, puoi mettere il file nella stessa o in altre directory

Fare un configuration file, dove puoi conservare tutte le impostazioni in un file .. e puoi tenerlo dove vuoi. Tutto quello che serve è chiamare ogni volta che ne hai bisogno.

A quel file di configurazione, rendere l'autorizzazione del file non accessibile dal pubblico.

1. Crea file config.ini

[local]
db_host = localhost
db_user = your_local_database_username
db_pass = **********
db_name = your_local_database_name


[server]
db_host = serverhost
db_user = your_local_database_username
db_pass = **********
db_name = your_server_database_name

2. Spostare e dare l'autorizzazione al file config.ini

3. Crea la tua pagina PHP o connessione Conn.php

<?php
$config_file_location_path = "/var/somelocation/config.ini"

$read_file = parse_ini_file($config_file_location_path, true);
$read_data = $read_file['local'];

$db_config = $read_data;

$db_host = $db_config['db_host'];
$db_user = $db_config['db_user'];
$db_pass = $db_config['db_pass'];
$db_name = $db_config['db_name'];


$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

if (!$conn) {
    die("Could not connect to server : " . mysqli_errno($conn));
}

E se vuoi lavorare server Basta cambiare $read_data = $read_file['server'];

Il posizionamento del file include a un livello superiore funzionerà. Li metto in /var /www e uso

set_include_path(get_include_path() . PATH_SEPARATOR .'/var/www/');

require_once 'mysqli_connect.inc.php';

Le password sono in mysqli_connect.inc.php ma gli utenti non possono vedere il codice sorgente dei file PHP, perché PHP li trasforma in HTML prima di inviarli al browser.

Presumibilmente non stai permettendo ai browser di vedere il contenuto delle cartelle: nessuna "DirectoryIndexes" come li chiama Apache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top