2009-04-03 4 views
1

Quelle est la meilleure pratique pour stocker des informations d'identification de base de données dans un CMS? Maintenant, je les déclare dans ma base de données classe singleton:Comment stockez-vous les informations d'identification de la base de données dans un CMS classique sur PHP?

$this->credentials = array("hostname"=>"hostname", "username"=>"username","password"=>"password", "database"=>"database"); 

Mais ce n'est pas si intuitif pour rechercher où les changer et aussi je prévois de faire installer le fichier pour cms plus tard.

Où et comment stockez-vous vos préférences de connexion?

Répondre

1

Vous pouvez utiliser une classe singleton, comme vous l'avez mentionné, ou quelque chose de plus simple.

Dans tous mes fichiers config.inc.php J'ai un tableau associatif norme

$config['Main_Database'] = ''; 
$config['db_user'] = ''; 
$config['db_pass'] = ''; 
$config['db_host'] = ''; 

Le concept est le même et vous êtes sur la bonne voie. Faites-en quelque chose qui, en tant qu'humain, a du sens pour vous. Si quelqu'un a accès à votre serveur, vous êtes foutu de toute façon, donc ce n'est pas une grosse affaire en termes de sécurité. En ce qui concerne le fichier d'installation, j'ai vu de nombreuses applications ouvrir le fichier de configuration, ajuster quelques parties spécifiques via le code, puis réécrire le fichier sur le serveur (plutôt que de "stocker un paramètre") . Il obtient le même résultat mais fait par un assistant par opposition à manuellement.

+0

J'aime cette approche, merci. –

1

CakePHP utilise un fichier de configuration appelé database.php (dans/app/config /), dans lequel une classe DATABASE_CONFIG est déclarée:

class DATABASE_CONFIG { 

    var $default = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'user', 
     'password' => 'password', 
     'database' => 'database_name', 
     'prefix' => '', 
    ); 

    var $test = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'user', 
     'password' => 'password', 
     'database' => 'test_database_name', 
     'prefix' => '', 
    ); 
} 

Cela crée un lieu unique où l'utilisateur peut définir toute leur base de données configurations tandis que la structure de répertoire intuitive rend évident où les configurations de base de données sont stockées. Et vous pouvez également spécifier plusieurs configurations à des fins de production, de développement et de test, qui sont faciles à basculer.

+0

Ceci est l'approche typique pour stocker de telles informations de configuration. Parfois, les formats .ini ou XML sont utilisés à la place, mais l'idée est la même. – Kalium

+0

Une remarque: si vous utilisez .ini /.xml vous devez en bloquer l'accès avec .htaccess, sinon tout le monde pourra les voir. – Alekc

+0

Oui, et je ne placerais pas ces fichiers xml et ini en root - je préfèrerais alors encore config.php.mycustomextension ou config.php plutôt qu'un xml ou ini ou txt - malgré htaccess - je n'y crois jamais. – TheBlackBenzKid

1

En règle générale, je ne place pas les informations d'identification directement dans le code source, mais les stocke dans des fichiers de configuration. Cela rend beaucoup plus facile de les changer, par exemple lorsque vous passez de votre machine de développement à la machine de test, qui peut (devrait) se connecter à une base de données différente.

Ce fichier de configuration doit être stocké quelque part en dehors du répertoire webroot.

Vous pouvez également crypter le mot de passe d'une manière ou d'une autre, pour avoir un peu plus de sécurité au cas où le fichier de configuration serait compromis. D'un autre côté, si quelqu'un obtient un accès physique à votre serveur, vous êtes foutu de toute façon, alors ça ne vaut peut-être pas le coup.

Questions connexes