{{htmlmetatags>metatag-description=(PHP est très souvent installé sur un serveur web car c'est un langage de programmation très couramment utilisé. PHP, comme tout langage de scripts, comporte des failles de sécurités intentionnelles ou non. Ces vulnérabilités s'expliquent par de mauvaises habitudes de programmation. )
metatag-og:image=(https://www1.zonewebmaster.eu/_media/serveur-debian-securite:2-1.jpg)
metatag-og:description=(PHP est très souvent installé sur un serveur web car c'est un langage de programmation très couramment utilisé. PHP, comme tout langage de scripts, comporte des failles de sécurités intentionnelles ou non. Ces vulnérabilités s'expliquent par de mauvaises habitudes de programmation. )
metatag-og:title=(Sécuriser votre PHP - zonewebmaster.eu)
metatag-og:type=(article)
metatag-og:url=(https://www1.zonewebmaster.eu/serveur-debian-securite:securiser-php)
metatag-og:locale=(fr_FR)
metatag-og:site_name(zonewebmaster.eu)
metatag-article:published_time=(2017-11-27)
metatag-article:modified_time=(2020-01-30)
metatag-article:author=(montuy337513)
metatag-article:tag=(php, php-fpm,hack, sécurisation,help, tuto, wiki, debian)
}}
====== Sécurisez votre PHP ======
PHP est très souvent installé sur un serveur web car c'est un langage de programmation très couramment utilisé. PHP, comme tout langage de scripts, comporte des failles de sécurités intentionnelles ou non. Voici comment renforcer **la sécurité de PHP**.\\
Ces vulnérabilités s'expliquent par de mauvaises habitudes de programmation (souvent un défaut de validation des entrées) ou par des erreurs dans le fichier de configuration //php.ini//.
Fonctionne pour toute version de PHP-FPM
===== Pré-requis / Difficultés =====
Il faut au préalable avoir installé PHP-FPM (à partir de la version 5.3) pour utiliser ce guide.
Toutes les lignes de commandes sont saisies dans un terminal avec accès administrateur //root//.
{{howhard>3}}
{{ :serveur-debian-securite:2-1.jpg?nolink&600 |}}
===== Préambule =====
Avant de commencer à sécuriser votre version de PHP, il est important de connaître la version PHP que vous avez installé sur votre machine avec la ligne de commande suivante.\\
versionPHP="$(readlink -f /usr/bin/php | cut -c 13-)"
===== Interdire l'exécution de fonctions PHP=====
Certaines fonctions de PHP peuvent directement lancer des scripts à distance qui peuvent être malveillant. Il est donc judicieux, surtout si vous ne les utilisez pas, d'interdire l'utilisation de certaines fonctions de PHP.
Pour cela, nous allons modifier la configuration de //PHP-FPM//.
Le fichier de configuration se trouve en général à : // /etc/php5/apache2/php.ini // ou // /etc/php5/fpm/php.ini. //
if [ ! -e "/etc/php/${versionPHP}/fpm/conf.d/50-secure.ini" ]; then
echo "
;Dangerous : disable system functions. This can break some administration softwares.
disable_functions = symlink,shell_exec,system,exec,proc_close,proc_open,popen,system,dl,passthru,escapeshellarg,escapeshellcmd
" > "/etc/php/${versionPHP}/fpm/conf.d/50-secure.ini"
fi
Sur //Debian//, nous stockons les fichiers de configuration de **PHP** dans le répertoire // /etc/php/${versionPHP}/fpm/conf.d //.\\
Le nom du fichier de configuration s'écrit par convention priorite-nom_fichier.ini, //priorite// fixe le niveau de priorité du fichier (99 étant le plus haut). Par convention, nous le fixons à 50. Le nom du fichier de configuration sera donc //50-secure.ini//.\\
Le //if// permet de vérifier si le fichier 50-secure.ini existe ou pas.
Il ne reste plus qu'a redémarrer //php-fpm// et //apache2//.
service "php${versionPHP}-fpm" restart
service apache2 restart
===== Supprimer l'exposition de la version de PHP =====
Nous pouvons aussi supprimer l'affichage de la version de PHP. Même principe que précédemment.
if [ ! -e "/etc/php/${versionPHP}/fpm/conf.d/50-version_exposure.ini" ]; then
echo "
; Disable PHP exposure
expose_php = Off
" > "/etc/php/${versionPHP}/fpm/conf.d/50-version_exposure.ini"
fi
Et nous relançons //php-fpm// et //apache2//.
service "php${versionPHP}-fpm" restart
service apache2 restart
===== Vérification des paramètres par défaut =====
Par mesure de sécurité, il vaut mieux vérifier les paramètres suivants dans les fichiers //php.ini//.
safe_mode = Off
safe_mode_gid = Off
memory_limit = -1
display_errors = Off
display_startup_errors = Off
register_globals = Off
magic_quotes_gpc = Off
magic_quotes_runtime = Off
allow_url_fopen = Off
allow_url_include = Off
Pour le paramètre //memory_limit// si votre machine possède une mémoire limitée mieux vaut mettre la valeur à 128MB (valeur par défaut).\\
Pour le paramètre //allow_url_fopen//, si vous devez utiliser la fonction //fopen// dans vos scripts, mettre cette valeur à ON
===== Aller plus loin =====
Si vous avez aussi installé le paquet **php-cli** pour lancer des scripts PHP directement en ligne de commande (une tâche CRON par exemple), vous pouvez modifier les commandes ci-dessus pour sécuriser **php-cli**. Il suffit de remplacer **fpm** par **cli** dans les lignes de commandes.
Une fois les modifications effectuées, relancer les services //PHP-FPM// et //apache2//.
===== Notes de version =====
* [27/11/2017] : Création de l'article
* [30/01/2020] : Mise à jour complet du guide
===== Auteurs et sources =====
* Auteur : [[:user:montuy337513]]
===== Navigation =====
{{page>:navigation#serveur-debian-php}}
{{page>:navigation#serveur-dedie-debian}}