Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP et MySQL - comment éviter le mot de passe dans le code source ?

Le plus simple est, comme vous l'avez dit, d'utiliser un fichier de configuration.

De nombreux frameworks l'utilisent (Zend , CakePHP , Kohana , etc) et c'est la façon la plus courante de faire les choses (même dans un environnement non-PHP comme ASP.NET avec son web.config des dossiers). Cela vous permet également de copier les valeurs de configuration d'un environnement à l'autre en copiant simplement les fichiers du site, ce qui est un avantage par rapport aux variables d'environnement de configuration du serveur (qui peuvent très rapidement être perdues et oubliées).

Vous ne devriez pas avoir à vous soucier de l'obscurcissement du mot de passe car ce n'est pas un fichier accessible au monde entier, il ne devrait certainement pas être accessible sur le Web. Ce que je veux dire par là, c'est que vous auriez soit a) Dites à votre serveur Web de ne pas servir votre fichier de configuration ( IIS le fait déjà avec web.config fichiers et fournit un statut HTTP 404.8 au lieu du contenu) ou b) Déplacez-le en dehors de votre répertoire Web. Si quelqu'un peut voir votre fichier de configuration, c'est pire que de l'avoir dans votre code source.

Ce sera également une bonne idée d'avoir une version de base (vide / par défaut) du fichier de configuration et de la séparer par environnement, afin que vous puissiez avoir un fichier de configuration différent pour les plates-formes de production, de développement et de test.

Une variable d'environnement est le moyen le plus courant de différencier ces environnements, quelque chose comme le code ci-dessous :

// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
    // Copy from web server to PHP constant
    define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}

if (!defined('ENVIRONMENT')) {
    // Default to development
    define('ENVIRONMENT', 'development');
}

// Load in default configuration values
require_once 'config.default.php';

// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';

Une autre méthode assez courante consiste à utiliser un fichier de configuration XML et à ne lire que les valeurs dont vous avez besoin, le cas échéant (en stockant une copie en cache du fichier de configuration en mémoire). Cela peut très facilement être limité au chargement de certaines valeurs, plutôt que d'autoriser l'inclusion arbitraire de fichiers PHP et est globalement une meilleure solution à mon avis, mais ce qui précède devrait vous aider à démarrer dans la bonne direction.

Vous voudrez probablement votre VCS pour ignorer le fichier. D'un autre côté, vous voudrez peut-être qu'un squelette du fichier, ou un avec des valeurs par défaut raisonnables (ce dernier ne s'applique pas aux données de connexion, bien sûr), soit sous contrôle de version. Une façon courante de gérer cela consiste à avoir un fichier de configuration de modèle archivé, et la procédure d'installation copie ce fichier à l'emplacement du fichier de configuration réel, où il est personnalisé. Il peut s'agir d'un processus manuel ou automatisé.

(Bien que quelque peu sans rapport avec la question principale, l'introduction d'une constante pour votre environnement vous permet de faire d'autres choses intéressantes comme reporter à une fausse implémentation de messagerie au lieu d'un live SMTP un, mais bien sûr cela pourrait aussi être fait avec un fichier de configuration)