Renforcer PHP pour WordPress

Publié: 2021-06-29

WordPress fonctionne sur PHP et est un composant essentiel auquel il faut prêter attention lors du renforcement de votre site WordPress. Cet article couvrira certains des fruits les plus courants et les plus simples que vous pouvez aborder en matière de sécurité PHP pour WordPress.

Attention – Soyez prudent lorsque vous apportez des modifications à vos paramètres PHP. Des paramètres et une syntaxe incorrects peuvent endommager votre site Web. Testez toujours vos modifications dans un environnement de développement ou de préproduction avant d'apporter des modifications en production.

Table des matières

  • Utilisez la dernière version de PHP
  • Supprimer la version PHP
  • Supprimez tous les fichiers phpinfo()
  • Supprimer les erreurs et les avertissements PHP
  • Restreindre inclut
  • Désactiver les fichiers distants inclus
  • Désactiver ou limiter les fonctions dangereuses
  • Bloquer l'exécution de PHP dans les répertoires sensibles
  • Conclusion

Utilisez la dernière version de PHP

En plus de vous assurer que vous corrigez votre système d'exploitation, votre serveur MySQL, votre serveur Web (par exemple, Nginx, Apache, IIS…), il est également absolument crucial de vous assurer que vous utilisez une version entièrement prise en charge de PHP 1 .

Étant donné que PHP est exposé à Internet (parce que WordPress s'exécute au-dessus de l'interpréteur PHP), il est plus à risque d'attaque en cas de découverte d'un exploit pour une vulnérabilité dans PHP. Dans une telle mesure, maintenir PHP à jour (et plus encore, pour rester à l'écart des versions PHP 5.x en fin de vie) est crucial non seulement pour empêcher les attaques de se produire, mais aussi pour permettre aux attaquants d'intensifier les attaques si ils parviennent à s'implanter sur votre site WordPress (par exemple en exploitant une vulnérabilité dans un plugin WordPress).

Supprimer la version PHP

Comme la plupart des logiciels de serveur Web, par défaut, PHP expose la version qu'il exécute via un en-tête HTTP X-Powered-By. Bien que cela ne constitue pas en soi une vulnérabilité de sécurité, comme dans toute autre situation, l'énumération des versions de logiciels est généralement utile pour les attaquants pendant la phase de reconnaissance d'une attaque. Par conséquent, en désactivant la version PHP, vous rendriez une attaque un peu plus difficile à réussir.

Heureusement, cela est facile à désactiver en utilisant le paramètre expose_php. Dans votre fichier de configuration php.ini , ajoutez simplement ce qui suit.

expose_php = Off

Supprimez tous les fichiers phpinfo()

Créer un fichier PHP à l'aide de la fonction phpinfo() à utiliser pour le débogage est une mauvaise habitude commune à de nombreux administrateurs système PHP. Si un attaquant tombe sur un fichier « phpinfo » (généralement nommé, sans surprise, phpinfo.php), il reçoit une mine d'informations et de détails non seulement sur la version de PHP exécutée sur le serveur, mais également sur d'autres aspects du site Web tels que en tant que serveur Web et de base de données.

Si vous avez vraiment besoin d'exécuter phpinfo(), il est bien plus préférable de le faire depuis la ligne de commande, comme suit.

php -i

Si vous avez plusieurs configurations de PHP sur votre système (ce qui est très courant), vous pouvez utiliser la commande suivante pour spécifier le fichier php.ini à utiliser.

php -c /etc/php/apache2/php.ini -i

Supprimer les erreurs et les avertissements PHP

Alors que les erreurs, les avertissements et les exceptions sont utiles pendant le développement, s'ils sont affichés dans un environnement public, les attaquants utiliseront souvent ces informations pour avoir un aperçu de la configuration du serveur, de la disposition de l'application et des composants.

Les messages d'erreur sont parmi les voies les plus courantes de divulgation d'informations, laissant souvent échapper des informations telles que le chemin d'installation de l'application et les détails de connectivité de la base de données. Au lieu d'afficher des erreurs et des avertissements, assurez-vous que ces informations sont consignées. Plus d'informations sur ce sujet peuvent être trouvées dans la documentation officielle de PHP.

Heureusement, cela est facile à désactiver en utilisant le paramètre display_errors. Dans votre fichier de configuration php.ini, ajoutez simplement ce qui suit.

display_errors = Off
log_errors = On

Restreindre inclut

Les vulnérabilités d'inclusion de fichiers permettent à un attaquant de contrôler une instruction PHP include(). Alors que PHP exécutera n'importe quel code PHP dans un fichier inclus, il imprimera tout le reste (en supposant qu'il s'agisse de texte en clair). Cela signifie qu'un attaquant prenant le contrôle d'une vulnérabilité d'inclusion de fichier peut finir par exécuter quelque chose de similaire à ce qui suit, lui donnant accès à des fichiers système sensibles. Pour en savoir plus sur l'inclusion de fichiers, consultez cet article.

include "../../../../etc/passwd"

En définissant le paramètre open_basedir dans php.ini, vous pouvez demander à PHP de n'autoriser les inclusions que dans un certain répertoire et en dessous. Bien que cela n'élimine pas les vulnérabilités d'inclusion de fichiers, cela les rend certainement plus restreintes et contrecarre également certaines attaques plus avancées qui peuvent conduire à l'exécution de code (lorsqu'un attaquant peut exécuter des commandes sur votre serveur).

Vous pouvez définir le paramètre PHP open_basedir comme suit dans votre fichier php.ini.

open_basedir = /var/www/html/example.com

Désactiver les fichiers distants inclus

En plus de restreindre les inclusions locales à un répertoire spécifique à l'aide de open_basedir, il est également conseillé de désactiver les inclusions distantes. Les attaques par inclusion de fichiers à distance (RFI) fonctionnent de la même manière que les attaques par inclusion de fichiers locaux, mais au lieu qu'un attaquant soit lié à des fichiers sur le système, l'inclusion de fichiers à distance permet à un attaquant d'inclure des fichiers sur le réseau. Ceci est extrêmement dangereux, et la plupart des attaques RFI aboutissent à ce qu'un attaquant soit capable d'exécuter arbitrairement du code sur votre serveur Web (appelé exécution de code à distance ou RCE).

Afin de désactiver les inclusions de fichiers distants, utilisez les options PHP allow_url_fopen et allow_url_include dans votre fichier php.ini comme suit.

allow_url_fopen = Off
allow_url_include = Off

Désactiver ou limiter les fonctions dangereuses

Dans le cas où un attaquant, malgré toutes vos mesures de sécurité, parvient à trouver une vulnérabilité dans la sécurité PHP de votre WordPress, qu'il peut exploiter, la dernière chose que vous souhaitez est qu'il puisse exécuter du code arbitraire sur votre serveur . Si un attaquant est capable d'exécuter du code arbitraire sur votre serveur, il peut probablement installer un shell Web ou établir un shell inversé pour contrôler davantage votre serveur et l'utiliser pour faire ses enchères néfastes (comme la diffusion de logiciels malveillants, l'utilisation de votre site Web pour des campagnes de phishing ou le déni d'attaques de service, ou même de minage de crypto-monnaie).

En désactivant des fonctions telles que shell_exec() et system(), vous pouvez empêcher les utilisateurs et les attaquants d'utiliser ces fonctions dangereuses. Bien qu'il puisse y avoir des raisons légitimes d'utiliser ces fonctions, elles sont très rares et il existe généralement un moyen plus sûr d'obtenir le même résultat.

Attention – Testez soigneusement les éléments suivants dans un environnement de test ou de mise en scène avant de les exécuter en production, car certains logiciels/plugins que vous utilisez peuvent (espérons-le légitimement) dépendre de ces fonctions.

Ce qui suit est une collection de fonctions potentiellement dangereuses que vous souhaiterez peut-être désactiver en PHP en utilisant le paramètre disable_functions dans votre fichier php.ini.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid,
posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,
posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, 
posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, 
posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, 
proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>

Bloquer l'exécution de PHP dans les répertoires sensibles

Par défaut, votre répertoire wp-content/uploads , qui est utilisé pour télécharger des thèmes, des plugins, des images, des vidéos et d'autres fichiers sur votre site Web, est autorisé à exécuter du code PHP. C'est un peu risqué - si un attaquant est en mesure de tirer parti d'une vulnérabilité de téléchargement de fichier dans un plugin ou un thème, il peut être en mesure de télécharger un webshell ou un type de porte dérobée similaire. Étant donné que l'exécution de PHP serait autorisée dans le répertoire wp-content/uploads , cet attaquant pourrait être en mesure d'exécuter réellement ce code PHP pour faire ses enchères malveillantes.

Empêcher cela est en fait assez simple - désactivez l'exécution de PHP dans le wp-content/uploads et le répertoire. La manière naïve serait de simplement bloquer l'accès aux fichiers *.php comme cela en utilisant .htaccess .

<Files *.php>
deny from all
</Files>

Cependant, la configuration ci-dessus est relativement facile à contourner - PHP exécutera dans la plupart des cas avec plaisir les fichiers .phtml .php3. Le moyen le plus sûr serait de désactiver littéralement le moteur PHP dans le répertoire. La configuration .htaccess suivante doit être placée dans les répertoires wp-content/uploads et wp-includes (un autre répertoire couramment ciblé par les attaquants).

php_flag engine off

Sécurité PHP pour WordPress – réflexions finales

Alors que WordPress lui-même doit être considéré comme une plate-forme robuste et sécurisée, l'environnement et l'infrastructure sur lesquels votre installation WordPress s'exécute contribuent grandement à assurer la sécurité de votre site Web dans son ensemble. La mise en œuvre des sujets abordés dans ce guide de renforcement de la sécurité PHP vous fournira une deuxième ligne de défense, ce qui rendra beaucoup plus difficile pour un attaquant d'intensifier une attaque après avoir abusé d'une vulnérabilité au sein de votre site Web WordPress.

Si vous souhaitez en savoir plus sur la façon de renforcer votre site WordPress, lisez notre guide définitif sur la sécurité et le renforcement de WordPress.

Références utilisées dans cet article [ + ]

Références utilisées dans cet article
1 https://www.php.net/supported-versions.php