Je travaille sur un PHP et mes recherches a montré qu'il est tout à fait possible que le serveur puisse être piraté et que les fichiers PHP peuvent être exposés. Je stocke Le nom d'utilisateur et le mot de passe MYSQL DB dans les fichiers PHP sous forme de constantes, qui est ensuite utilisé lors de la formation de la chaîne de connexion.
define("HOSTNAME","hostname.com:2086");
define("DBNAME","databasename");
define("DBUSER","databaseusername");
define("DBPASS","databasepassword!");
/* Defining DB Handler */
try{
$DBH = new PDO("mysql:Host=".HOSTNAME.";dbname=".DBNAME, DBUSER, DBPASS);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$DBH->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
catch(PDOException $e){
echo $e->getMessage();
}
Si, en tout cas, les fichiers PHP sont-ils exposés, cela entraînerait également la base de données et son contenu. Suis-je le faire mal? Y a-t-il un meilleur moyen d'assurer la sécurité du Base de données même si le PHP fichiers est-il exposé?
Je suis bon moyen de protéger vos clés consiste à placer le fichier PHP avec les informations d'identification en dehors du webroot. Même lorsque les fichiers PHP "bruts" sont servis à un client, aucun d'entre eux n'inclut les informations d'identification de la base de données. (Ne protège pas contre une personne ayant accès au fichier sur le serveur).
Une autre mesure défensive que vous puissiez prendre est de limiter les connexions que la base de données accepte les connexions de. (Donc, pas le monde entier mais juste une liste de sélections d'IP spécifique)
Enfin, vous devriez rendre le compte qui se connecte à la base de données n'a que des droits sur sa propre base de données et aucun autre!
défense en profondeur est le mot clé: au lieu de simplement sécuriser les informations d'identification, assurez-vous que même connaître les informations d'identification est (presque) inutile pour un attaquant.
Cela signifie, utilisez un dédié tilisateur avec les privilèges les moins chères ( principe du moindre privilège ) et restreindre l'accès avec cet utilisateur à partir du serveur Web uniquement . Ensuite, ce n'est pas vraiment important de conserver les informations d'identification comme le seul moyen d'exploiter ces informations d'exploitation provient du serveur Web, ce qui signifie qu'il/elle nécessite une exécution de code/de commande sur le serveur Web. Et dans ce cas, vous êtes déjà condamné.
Ce que je ferais, outre les mesures mentionnées dans les autres réponses, consiste à lire le nom d'utilisateur/mot de passe à partir d'un fichier à extraire du serveur Web et pour que ce fichier soit explicitement sur la liste noire pour tous sauf le serveur lui-même.
Vous pouvez les mettre dans des variables d'environnement.
En plus de la petite avantage de sécurité, ils fournissent de multiples avantages pour votre flux de travail de développement, comme ne pas avoir à toucher PHP Fichiers et insérer différentes informations d'identification à chaque fois que vous souhaitez travailler sur un environnement de développement différent. Au lieu de cela. , l'environnement fournit ces informations et vous n'avez qu'une seule application qui s'adapte automatiquement à l'endroit où elle est déployée.