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

藏色散人
Libérer: 2023-04-09 16:06:01
avant
5467 Les gens l'ont consulté

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
Copier après la connexion

(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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

Masquer la version PHP

Enfin, sans réfléchir :

sed -i -e "s/expose_php = On/expose_php = Off/g" /etc/php7/php.ini
Copier après la connexion

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!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal