Paramètres de Sécurité PHP
Généralités
Cet article rentre dans le cadre de la sécurisation d’une machine et son hardening dès l’existence d’un moteur PHP au niveau du serveur.
Qu’il s’agisse d’un environnement Linux ou Windows, le fichier php.ini est un élément clé dans la bonne sécurisation du moteur php et du serveur web d’une manière générale.
Le fait d’oublier des paramètres de sécurité importants au niveau de ce fichier peut présenter des brèches de sécurité potentiellement exploitables et rendant le serveur vulnérable, et ce même si les applications web, elle sont sécurisées au niveau du codage. Ceci pourra par conséquent compromettre la confidentialité, l’intégrité et la disponibilité des données au niveau du serveur.
Pour ces raisons, nous allons nous focaliser dans cet article sur les paramètres de sécurité les plus importants figurant au niveau de php.ini, leur signification ainsi que leur impact.
Paramètres de sécurité de php.ini
Les paramètres suivant sont à vérifier au niveau de php.ini et peuvent impacter la sécurité du serveur :
expose_php = On : Doit être à on ; prévient le serveur d’envoyer la version de php au niveau des paquets http.
safe_mode = On : Le safe mode est en rapport avec plusieurs paramètres de sécurité au niveau du fonctionnement du moteur php. L’activer à on permettra une manipulation plus sécurisée des données traitées par le moteur php, donne plus de robustesse au serveur et inclut plus de vérification au niveau des données traitées, notamment en termes de validation des données et de droits d’accès.
memory_limit = 4M : Ce paramètre limite la quantité de mémoire allouée à chaque fonction exécutée par le système. Limiter cette valeur permet de réduire ou d’éviter certains dénis de services et limiter l’instabilité du serveur en cas d’exécution de code potentiellement dangereux ou mal codé. La taille est indiquée en Mégaoctets.
display_errors = Off : Le configurer à Off permet d’empêcher l’affiche de messages d’erreur qui pourrait server à un attaque pour obtenir certaines informations.
max_execution_time : Limite le temps d’exécution pour chaque script. Un script exécuté sans limite de temps peut poser des problèmes de sécurité et menace la confidentialité des données (cas d’attaques par blind fuzzing) ou de la disponibilité des données (déni de service)
sql.safe_mode = On : Similaire au safe_mode, mais spécifique aux bases de données. Permet d’exécuter les sql_query d’une manière plus sécurisée et d’éviter certaines injections SQL et autre vulnérabilités.
allow_url_fopen = Off : Prévient contre certaines vulnérabilité permettant d’exploiter des scripts malicieux distants et de les inclure dans la page actuelle ; empêche de charger du contenu d’un autre site
allow_url_include = Off : Similaire au paramètre précèdent mais plus axés sur la fonction include
disable_functions = <nom_fonction> : Paramètre de sécurité très important et très utile permettant de désactiver des fonctions php potentiellement dangereuses comme system() par exemple :
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,