Actuellement en PHP (dans le fichier /var/www/website.com/public_html/functions.php
). Je me connecte à la base de données comme ceci:
function connect(){
$config = parse_ini_file('/var/www/website.com/db.ini');
$con = mysqli_connect("localhost",$config['username'],$config['password'],$config['db']);
if(!$con){
die("Failed to connect to Database");
}
return $con;
}
Où le /var/www/website.com/db.ini
est
username=user123
password=pass123
db=mydb
avec des autorisations:
-rw-r--r-- 1 root root 84 /var/www/website.com/db.ini
Le PHP sera exécuté par www-data
ou root
.
La racine de website.com
est /var/www/website.com/public_html/
.
Est-ce la meilleure façon de se connecter à une base de données en utilisant PHP d'un point de vue de la sécurité? Je crée également ce code open source.
Votre approche semble bonne.
Vous stockez les informations d'identification dans un fichier de configuration distinct au lieu de les avoir écrites en ligne dans le code source. Cela le rend sûr lors du partage du code avec d'autres et protège les informations d'identification dans le cas où une mauvaise configuration permet d'imprimer le code PHP code ordinaire (ce qui arrive assez souvent).
Le fichier de configuration est en dehors de la racine du document public, il ne peut donc pas être directement accessible par un utilisateur de l'application Web, sauf s'il existe une autre vulnérabilité (par exemple, une faille de traversée de répertoire).
Dans tous les cas, vous devez éviter d'exécuter le serveur en tant que root
. Sinon, le modèle d'autorisation est sans valeur, car root
peut lire et écrire dans n'importe quel fichier.
Notez que vous n'avez pas du tout à gérer l'analyse des informations d'identification dans votre code - vous pouvez plutôt les spécifier comme paramètres d'exécution PHP dans la configuration du serveur, comme expliqué ici .
Regarde aussi:
Je suis sceptique quant à cette approche -rw-r--r-- 1 root root
. Le moyen sûr de le faire serait
-r-------- 1 root root
C'est-à-dire lisible uniquement par l'utilisateur root
root
, lisez les informations d'identification et connectez-vous puis immédiatement setuid()
à www-data
. Ainsi, toute personne qui compromet l'application ne peut pas lire le fichier, même via une attaque de traversée de répertoire, à moins bien sûr de trouver un autre moyen d'obtenir root
dans ce cas, le jeu est terminé de toute façon. Ceci devrait être possible en PHP .Il s'agit du même mécanisme que les serveurs Web utilisent pour se lier au port 80, qui est un port privilégié.