Recommandé : "Tutoriel vidéo PHP"
Bonjour, développeur PHP. Dans cet article, je vais essayer de vous proposer quelques mesures concrètes que vous pouvez prendre pour améliorer la sécurité de vos applications PHP. Je me concentre sur la configuration PHP elle-même, nous ne discuterons donc pas de l'injection SQL, de HTTPS ou d'autres problèmes non liés à PHP.
J'utiliserai les lignes bash de mon script docker-entrypoint.sh
pour illustrer l'exemple, mais bien sûr, vous pouvez l'appliquer à un environnement non-docker.
Sessions
Utilisez une longueur d'ID de session plus longue
L'augmentation de la longueur de l'ID de session rend plus difficile pour les attaquants de deviner ( Par force brute ou, plus probablement, par une attaque par canal secondaire). La longueur peut être comprise entre 22 et 256 caractères. La valeur par défaut est 32.
sed -i -e "s/session.sid_length = 26/session.sid_length = 42/" /etc/php7/php.ini
(Ne me demandez pas pourquoi il est 26 sur Alpine Linux…)
Vous voudrez peut-être aussi consulter session.sid_bits_per_character.
Utilisez un chemin de sauvegarde de session personnalisé avec des autorisations restreintes
Seul nginx/php a besoin d'accéder à la session, plaçons-les donc dans une session spéciale avec un dossier d'autorisations restreintes.
sed -i -e "s:;session.save_path = \"/tmp\":session.save_path = \"/sessions\":" /etc/php7/php.ini mkdir -p /sessions chown nginx:nginx /sessions chmod 700 /sessions
Bien sûr, si vous utilisez Redis pour gérer les sessions, vous n'avez pas besoin de vous soucier de cette partie ;)
Cookie de session sécurisé
session .cookie_httponly pour empêcher javascript d'y accéder. Plus d'informations.
sed -i -e "s/session.cookie_httponly.*/session.cookie_httponly = true/" /etc/php7/php.ini sed -i -e "s/;session.cookie_secure.*/session.cookie_secure = true/" /etc/php7/php.ini
session.cookie_secure Empêche la transmission de vos cookies via HTTP en texte clair.
session.cookie_samesite pour prévenir les attaques intersites. Fonctionne uniquement avec les derniers PHP/navigateurs.
Utilisation du mode strict
En raison de la spécification du cookie, un attaquant peut placer un cookie d'ID de session non amovible via une base de données de cookies définie localement ou une injection JavaScript. session.use_strict_mode empêche l'utilisation d'ID de session initiés par un attaquant.
Durée de vie limitée
La session doit être fermée avec le navigateur. Alors définissez session.cookie_lifetime sur 0.
Open_basedir
open_basedir est une option de configuration php.ini
qui vous permet de limiter les fichiers/répertoires auxquels PHP peut accéder.
sed -i -e "s#;open_basedir =#open_basedir = /elabftw/:/tmp/:/usr/bin/unzip#" /etc/php7/php.ini
Ici, j'ai ajouté unzip car il est utilisé par Composer. /elabftw
est l'endroit où se trouvent tous les fichiers php sources. Je ne me souviens pas pourquoi /tmp
est ici, mais il doit y avoir une raison.
Désactiver la fonctionnalité
Soyez prudent avec cela car vous pouvez facilement gâcher une application. Mais cela vaut vraiment la peine d'être étudié. Disons qu'un attaquant télécharge d'une manière ou d'une autre un webshell, s'il est correctement désactivé, le webshell ne fonctionnera pas vraiment car shell_exec
sera désactivé et il en sera de même. J'ai fourni une liste qui fonctionne pour elabftw, mais elle n'est pas complète à 100 %.
sed -i -e "s/disable_functions =/disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abort, shell_exec, dl, 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, phpinfo/" /etc/php7/php.ini
Désactiver url_fopen
allow_url_fopen Cette option est dangereuse. Désactivez-le. Plus d'informations ici.
sed -i -e "s/allow_url_fopen = On/allow_url_fopen = Off/" /etc/php7/php.ini
Désactivez cgi.fix_pathinfo
Vous ne voulez pas que les fichiers non PHP s'exécutent en tant que fichiers PHP, n'est-ce pas ? Désactivez ensuite cette fonctionnalité. Plus d'informations.
sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php7/php.ini
Masquer la version PHP
Enfin, sans réfléchir :
sed -i -e "s/expose_php = On/expose_php = Off/g" /etc/php7/php.ini
C'est tout pour l'instant. J'espère que cet article vous sera utile et que vous améliorerez votre configuration ;)
Si j'ai raté quelque chose d'important, n'hésitez pas à me le faire savoir dans les commentaires !
Adresse originale : https://dev.to/elabftw/10-steps-for-securing-a-php-app-5fnp
Adresse de traduction : https://learnku.com /php/t/50851
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!