Maison >développement back-end >tutoriel php >Partagez dix conseils essentiels pour la sécurité PHP

Partagez dix conseils essentiels pour la sécurité PHP

藏色散人
藏色散人avant
2020-10-26 13:53:455469parcourir

Recommandé : "Tutoriel vidéo PHP"

Partagez dix conseils essentiels pour la sécurité 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Créer un package Php PSR-4Article suivant:Créer un package Php PSR-4