Envisagez une configuration open_basedir
"par site". open_basedir
est un paramètre php.ini qui empêchera vos scripts d'accéder à des fichiers en dehors d'une liste blanche définie. Si votre serveur héberge plusieurs sites, cela empêchera un site de lire les paramètres de la base de données d'un autre site. Cela empêchera également un script php d'accéder / de modifier les fichiers système principaux. Open basedir est facile à configurer, il suffit d'ajouter la ligne " php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" à chaque vhost Apache.
Pensez également à désactiver le moteur de script PHP pour tous les sites / dossiers qui ne devraient pas contenir de scripts PHP (par exemple, un dossier d'images téléchargées). Encore une fois, c'est simple, ajoutez "php_admin_value engine off" à tous les Apache VirtualHosts qui n'ont pas besoin de php. Pour désactiver PHP dans un répertoire, mettez la même chose dans une balise Directory.
Exécutez les autorisations de fichier aussi serrées que possible, évitez l'accès en écriture aux scripts PHP pour l'utilisateur Apache, cela empêche un script en cours d'exécution de se modifier lui-même ou d'autres scripts sur le même site / serveur. Évitez autant que possible les autorisations 777, déterminez les autorisations minimales requises pour exécuter l'application et les utiliser.
Si vous hébergez plusieurs sites, chacun avec sa propre base de données, utilisez un utilisateur MySQL / Postgres distinct pour chacun, et définissez des autorisations sur chaque utilisateur de sorte qu'ils n'aient accès qu'aux bases de données pertinentes. Encore une fois, cela empêchera un script non autorisé d'altérer la base de données d'une autre application.
Suosin, HardenedPHP, mod_security et similaires sont également précieux, mais utilisez-les en plus d'une configuration étroitement verrouillée, pas à la place de.