Ce n’est pas plus intelligent que PHP est l’un des langages de programmation de script de serveur les plus utilisés. Il est logique pour un attaquant de trouver différentes façons de manipuler PHP car il est souvent associé à MySQL et permettre l’accès aux données privées de vos utilisateurs.
En aucun cas, nous ne prétendons PHP est vulnérable ou a des problèmes sérieux par défaut, mais nous devons nous assurer que nous peaufinons PHP de telle sorte qu’il peut être plus robuste que jamais.
1. Supprimer les modules PHP inutiles
Par défaut, vous obtenez un ensemble de PHP modules qui peuvent être utiles dans diverses tâches, mais certains modules inutiles peuvent ne pas être utiles pour chaque projet. Liste disponible PHP modules, utilisez la commande donnée :
$ php -m
Les modules sont situés à /etc/php.d/
répertoire et peut facilement changer notre répertoire actuel en /etc/php.d/ en utilisant la commande cd suivante.
cd /etc/php.d/
La raison pour laquelle nous changeons de répertoire pour supprimer des modules est que les modules sont nommés de manière assez différente dans le répertoire d’origine. Maintenant, répertoriez les modules disponibles par la commande donnée :
$ ls
Par exemple, supprimons le boucle module en utilisant la commande donnée :
$ sudo rm -r 20-curl.ini
2. Désactiver l’exécution de code PHP à distance
Dans la plupart des cas, les connexions à distance ne sont pas fiables. En désactivant l’accès à ouvrir wrappers, ils ne peuvent accéder qu’aux fichiers locaux. Pour désactiver fopen, nous devons ouvrir le fichier de configuration PHP en utilisant la commande donnée :
$ sudo nano /etc/php.ini
Maintenant, utilisez CRTL + w
et tapez allow_url_fopen
qui nous amènera sur des lignes spécifiques à partir desquelles nous désactiverons ces options.
allow_url_fopen=Off allow_url_include=Off
Une fois que vous avez terminé les modifications, enregistrez le fichier de configuration en CTRL + O
et frappe Entrer.
3. Désactiver la fuite d’informations PHP
Lorsqu’il n’est pas désactivé, le monde peut facilement identifier quelle version de PHP est actuellement utilisé par notre serveur Web. Cela peut ne pas sembler un gros problème, mais informer l’attaquant de la version exacte peut être dangereux.
$ sudo nano /etc/php.ini
Maintenant, changez les valeurs par défaut en “Off”
.
expose_php=Off
4. Désactiver les journaux d’erreurs PHP
Par défaut, chaque erreur de notre serveur Web est visible par nos visiteurs, y compris les attaquants. Pour nous assurer qu’aucune des erreurs n’est visible par quiconque, nous devons apporter des modifications à notre fichier de configuration PHP.
$ sudo nano /etc/php.ini
Et modifiez le paramètre par défaut d’affichage des journaux d’erreurs en “Off”
.
display_errors = Of
Mais que se passe-t-il si vous êtes un développeur et que vous avez besoin de journaux d’erreurs pour résoudre les problèmes de développement ? Ne vous inquiétez pas, il existe un moyen d’obtenir vos fichiers journaux en apportant simplement une légère modification au même fichier de configuration.
Nous devons juste activer log_errors et donner un chemin à error_log où nos fichiers journaux seront stockés.
log_errors=On error_log=/var/log/httpd/php_scripts_error.log
5. Contrôle des ressources PHP
Selon nous, la gestion des ressources est la partie la plus cruciale lors de la sécurisation PHP. Ici, nous allons allouer une quantité fixe de temps d’exécution, de temps d’entrée et de limite de mémoire, donc si notre script est compromis d’une manière ou d’une autre, l’exécution sera arrêtée après un certain temps.
Nous avons choisi 25 secondes pour le temps d’exécution et d’entrée et 30 Mo de limite de mémoire. Bien sûr, vous pouvez le personnaliser selon vos besoins.
max_execution_time = 25 max_input_time = 25 memory_limit = 30M
6. Restreindre l’accès aux fichiers PHP
Pour restreindre l’accès aux fichiers, nous allons activer open_basedir
ce qui garantira que PHP ne peut inclure que des fichiers de nos répertoires répertoriés.
Important: Cela bloquera tous les autres répertoires et nous obligera à ajouter manuellement des répertoires importants, ce qui inclut également l’ajout de fichiers temporaires et de répertoires de session.
open_basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session"
7. Configurer les téléchargements de fichiers PHP
Si votre application ne nécessite pas de télécharger des fichiers du côté de l’utilisateur, il est toujours conseillé de désactiver les téléchargements de fichiers. Cela empêche les attaquants de télécharger des scripts dangereux qui pourraient finir par endommager l’ensemble de l’application.
file_uploads = Off
Mais que se passe-t-il si votre application est conçue pour obtenir des fichiers du côté de l’utilisateur ? Dans ce cas, vous devez activer les téléchargements de fichiers, mais essayez de réduire l’espace maximum et de réduire le nombre maximum de fichiers pouvant être téléchargés à partir d’une seule requête.
file_uploads = On upload_max_filesize = 1M max_file_uploads = 1
En PHP, par défaut, les fichiers temporaires sont placés dans un répertoire que tous les utilisateurs du système peuvent écrire. L’emplacement par défaut doit être basculé vers un emplacement plus sécurisé et assurez-vous qu’il ne se trouve pas dans la racine Web.
Comme nous avons utilisé open_basedirnous utiliserons le même emplacement que celui que nous avons déjà ajouté à la liste blanche.
upload_tmp_dir = /var/lib/php/tmp_upload
8. Désactiver les fonctions PHP dangereuses
PHP a diverses fonctions activées par défaut et peut être utile à des fins de développement. Mais de nombreuses fonctions peuvent être utilisées par les pirates pour exploiter notre serveur Web et les désactiver ajoutera une couche de sécurité.
Nous avons un ensemble de fonctions désactivées et assurez-vous de les vérifier avant d’apporter des modifications au fichier de configuration.
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
9. Modifier le répertoire du cache SOAP
Comme nous avons changé le répertoire temporaire et la session par défaut, il en va de même pour le DU SAVON cache car il ne doit pas être enregistré dans le répertoire par défaut. Assurez-vous qu’il est enregistré dans un endroit sûr.
soap.wsdl_cache_dir = /var/lib/php/soap_cache
10. Contrôler la taille PHP POST
En contrôlant PUBLIER taille, nous pouvons sécuriser notre serveur contre un pirate informatique tentant de coaguler les ressources du serveur en envoyant d’énormes fichiers. Cela nous évite des pannes de serveur indésirables et un temps de réponse lent.
post_max_size=4M
11. Protégez les configurations PHP
Lors de la suppression des fichiers inutiles, nous supprimons souvent certains fichiers cruciaux ou même des répertoires. Nous devons donc modifier les paramètres de manière à ce que même les utilisateurs root ne puissent pas les supprimer. Pour créer des fichiers et des répertoires, nous utiliserons chattr avec différents drapeaux.
Une fois que vous avez utilisé la commande donnée, vous ne pouvez plus modifier un fichier spécifique ou le supprimer.
$ sudo chattr +i /etc/php.ini
Lors de la tentative de suppression d’un fichier immuable, une erreur indiquant « Opération non autorisée”.
$ sudo rm -r /etc/php.ini
Mais que se passe-t-il si vous voulez continuer à écrire ces fichiers tout en les rendant immuables ? Vous pouvez facilement y parvenir en utilisant le +a
drapeau au lieu de +i
.
$ sudo chattr +a /etc/php.ini
Il peut y avoir des cas où vous n’avez plus besoin de l’ancien fichier de configuration et dans ce cas, nous devons supprimer les attributs.
$ sudo chattr -i /etc/php.ini
De même, si vous alliez avec +a
attributs en train de rendre les fichiers immuables, vous pouvez l’inverser en utilisant la commande donnée :
$ sudo chattr -a /etc/php.ini
12. Utiliser des certificats SSL pour HTTPS
De nos jours, chaque navigateur moderne tel que Google Chrome, Firefox, Opera et autres recommande d’utiliser HTTPS pour les serveurs Web. Comme HTTPS fournit un canal d’accès sécurisé et crypté pour les sites non fiables, nous pouvons offrir une expérience fiable à nos utilisateurs.
En ajoutant HTTPSnous pouvons nous protéger contre XSS attaques, y compris empêcher les pirates de lire les données transportées à l’aide de codes.
Pour activer HTTPS, nous installerons et utiliserons le logiciel gratuit Encryptons le certificat SSL sur le serveur.
$ sudo dnf install epel-release $ sudo dnf install certbot python3-certbot-apache mod_ssl $ sudo certbot --apache -d domain.com [For Apache] $ sudo certbot --nginx -d domain.com [For Nginx]
13. Mettre à jour PHP régulièrement
Comme il s’agit d’un langage open source, il est corrigé presque quotidiennement. Cela peut ne pas sembler être une étape importante, mais peut vous éviter une vulnérabilité majeure. Assurez-vous donc de garder vos packages PHP à jour, ce qui vous évitera de nombreuses vulnérabilités possibles.
# yum update & yum upgrade [On RHEL-based systems] # apt update && apt upgrade [On Debian-based systems]
C’était notre point de vue sur la façon dont vous pouvez facilement améliorer la sécurité de PHP dans les systèmes Linux. Tout au long de ce tutoriel, nous avons essayé de simplifier au maximum les choses et si vous avez encore des doutes, n’hésitez pas à nous le faire savoir dans les commentaires.