Maison >développement back-end >Problème PHP >Comment résoudre les problèmes de sécurité en php
Configuration de la sécurité PHP
(1) Activez le mode sans échec de PHP (recommandé à apprendre :Programmation PHP de l'entrée à la maîtrise)
Le mode sans échec de php est un mécanisme de sécurité intégré très important qui peut contrôler certaines fonctions de php, telles que system(), et au en même temps contrôler plusieurs La fonction d'opération de fichier contrôle les autorisations et ne permet pas l'accès à certains fichiers clés, tels que /etc/passwd Cependant, le php.ini par défaut n'ouvre pas le mode sans échec :
safe_mode = on
(2) Sécurité du groupe d'utilisateurs
Lorsque safe_mode est activé et safe_mode_gid est désactivé, le script php peut accéder au fichier et les utilisateurs du même groupe peuvent également accéder au fichier . Il est recommandé de le définir sur :safe_mode_gid = offS'il n'est pas défini, nous ne pourrons peut-être pas exploiter les fichiers du répertoire de notre site Web serveur, par exemple, lorsque nous devons opérer fichiers.
(3) Répertoire personnel pour exécuter des programmes en mode sans échec
Si le mode sans échec est activé mais que vous souhaitez exécuter certains programmes, vous pouvez spécifier le programme à exécuter exécuté Répertoire principal :safe_mode_exec_dir = D:/usr/binGénéralement, il n'est pas nécessaire d'exécuter un programme, il est donc recommandé de ne pas exécuter le répertoire du programme système. Vous pouvez pointer vers un répertoire et copier le programme qui doit être exécuté, tels que :
safe_mode_exec_dir = D:/tmp/cmdCependant, je recommande de n'exécuter aucun programme, vous pouvez alors pointer vers notre répertoire Web :
safe_mode_exec_dir = D:/usr/www
(4) Inclure les fichiers en mode sans échec
Si vous souhaitez inclure certains fichiers publics en mode sans échec, alors modifiez les options :safe_mode_include_dir = D:/usr/www/include/En fait, généralement les fichiers inclus dans les scripts PHP ont été écrits dans le programme lui-même. être fixé en fonction des besoins spécifiques.
(5) Contrôler les répertoires auxquels les scripts PHP peuvent accéder
Utilisez l'option open_basedir pour contrôler que les scripts PHP ne peuvent accéder qu'aux répertoires spécifiés, ce qui peut empêcher les scripts PHP de accéder aux répertoires auxquels il ne faut pas accéder Les fichiers consultés limitent dans une certaine mesure les dommages de phpshell Nous pouvons généralement le configurer pour accéder uniquement au répertoire du site Web :open_basedir = D:/usr/www
(6) Désactiver les fonctions dangereuses <.>Si Si le mode sans échec est activé, l'interdiction de la fonction n'est pas nécessaire, mais nous le considérons quand même pour des raisons de sécurité. Par exemple, si nous ne voulons pas exécuter des fonctions PHP telles que system() qui peuvent exécuter des commandes, ou des fonctions telles que phpinfo() qui peuvent afficher des informations PHP, alors nous pouvons les bannir :
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
If vous Pour interdire toute opération sur les fichiers et les répertoires, vous pouvez fermer de nombreuses opérations sur les fichiers
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
Ce qui précède ne répertorie que certaines des fonctions de traitement de fichiers couramment utilisées. Vous pouvez également combiner la fonction de commande d'exécution ci-dessus avec cette fonction pour obtenir Résister. la plupart des phpshells.
(7) Fermer la fuite des informations de version PHP dans l'en-tête httpAfin d'empêcher les pirates d'obtenir les informations de version PHP sur le serveur, nous pouvons fermer la fuite de ces informations dans l'en-tête http Header :
expose_php = Off
Par exemple, lorsqu'un hacker telnet www.greatmo.com 80, il ne pourra pas voir les informations PHP.
(8) Désactiver l'enregistrement des variables globalesLes variables soumises en PHP, y compris les variables soumises via POST ou GET, seront automatiquement enregistrées en tant que variables globales et peuvent être directes. l'accès est très dangereux pour le serveur, nous ne pouvons donc pas le laisser être enregistré en tant que variable globale, nous désactivons donc l'option d'enregistrement de la variable globale :
register_globals = Off
Bien sûr, s'il est défini comme ceci, alors lors de l'obtention la variable correspondante Des méthodes raisonnables doivent être utilisées, comme obtenir la variable var soumise par GET, puis $_GET['var'] doit être utilisé pour l'obtenir. Les programmeurs PHP doivent y prêter attention.
(9) Activez magic_quotes_gpc pour empêcher l'injection SQLL'injection SQL est un problème très dangereux Dans le plus petit cas, le backend du site Web est envahi, et dans le plus petit cas, le backend du site Web est envahi. Dans le pire des cas, tout le serveur s'effondre, alors soyez prudent. Il y a un paramètre dans php.ini :
magic_quotes_gpc = Off
Ceci est désactivé par défaut. S'il est activé, il convertira automatiquement les requêtes SQL soumises par l'utilisateur, telles que la conversion de ' en ', etc. empêcher l’injection SQL a un rôle important. Par conséquent, nous vous recommandons de le définir sur :
magic_quotes_gpc = On(10) Contrôle des messages d'erreur
Généralement, PHP affichera une erreur lorsqu'il n'est pas connecté à la base de données ou sous dans d'autres circonstances. Messages d'erreur généraux Il contiendra les informations de chemin actuel du script php ou l'instruction SQL de la requête. Ce type d'informations n'est pas sûr après avoir été fourni aux pirates, il est donc généralement recommandé que le serveur désactive les invites d'erreur :
display_errors = Off
Si vous souhaitez afficher les informations d'erreur, vous devez définir le niveau d'affichage de l'erreur, par exemple, afficher uniquement les informations au-dessus de l'avertissement :
error_reporting = E_WARNING & E_ERROR
Bien sûr, je recommande toujours de désactiver les invites d'erreur .
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!