Maison  >  Article  >  développement back-end  >  Plusieurs détails de sécurité courants liés à PHP

Plusieurs détails de sécurité courants liés à PHP

迷茫
迷茫original
2017-01-14 13:39:541793parcourir

Nous avons installé PHP manuellement. Le fichier de configuration par défaut de PHP se trouve dans /usr/local/apache2/conf/php.ini. Notre chose la plus importante est de configurer le contenu de php.ini afin que nous puissions exécuter PHP de manière plus sûre. . Les paramètres de sécurité dans l'ensemble de PHP visent principalement à empêcher les attaques de phpshell et d'injection SQL. Discutons-en lentement. Nous utilisons d'abord n'importe quel outil d'édition pour ouvrir /etc/local/apache2/conf/php.ini Si vous l'installez d'une autre manière, le fichier de configuration peut ne pas se trouver dans ce répertoire.

(1) Activer le mode sans échec de PHP

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 le système ( ),

contrôle également les autorisations de nombreuses fonctions d'opération de fichiers et n'autorise pas certains fichiers clés, tels que /etc/passwd,

mais le php.ini par défaut est Si le mode sans échec est pas activé, nous l'allumons :

safe_mode = on

(2) Sécurité du groupe d'utilisateurs

Lorsque safe_mode est activé, safe_mode_gid est désactivé, puis le php script Le fichier est accessible et les utilisateurs du même groupe

peuvent également accéder au fichier.

Il est recommandé de le définir sur :

safe_mode_gid = off

Si vous ne le définissez pas, nous ne pourrons peut-être pas exploiter les fichiers du répertoire de notre site Web serveur. Par exemple, nous devons

exploiter les fichiers lors de l'exploitation.

(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écuté. Répertoire principal :

safe_mode_exec_dir = D:/usr/bin

Gé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,

. puis copiez le programme qui doit être exécuté. Dans le passé, par exemple :

safe_mode_exec_dir = D:/tmp/cmd

Cependant, 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) Inclus dans le fichier en mode sans échec

Si vous souhaitez inclure certains fichiers publics en mode sans échec, modifiez les options :

safe_mode_include_dir = D:/usr/www/include/

En fait, généralement les fichiers inclus dans les scripts php sont déjà dans le programme lui-même. Une fois écrits, cela peut être paramétré en fonction de besoins spécifiques.

(5) Contrôlez 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 l'accès aux

Fichiers auxquels il ne faut pas accéder limite les dommages de phpshell dans une certaine mesure. Nous pouvons généralement le configurer pour accéder uniquement au répertoire du site :

open_basedir = D:/usr/www

(6) . Fermer les fonctions dangereuses

Si le mode sans échec est activé, l'interdiction des fonctions n'est pas nécessaire, mais nous la considérons toujours pour des raisons de sécurité. Par exemple,

nous pensons que nous ne voulons pas exécuter de fonctions php, notamment system() qui peut exécuter des commandes, ou des fonctions telles que

phpinfo() qui peuvent afficher des informations php, alors nous pouvez les désactiver :

disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

Si vous souhaitez désactiver des opérations sur les fichiers et les répertoires, vous pouvez désactiver 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 n'est qu'une liste de quelques fonctions de traitement de fichiers peu utilisées , vous pouvez également combiner la fonction de commande d'exécution ci-dessus avec cette fonction,

peut résister à la plupart des phpshells.

(7) Fermez la fuite des informations de version PHP dans l'en-tête http

Afin 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.chinaz.com 80, il ne pourra pas voir les informations PHP.

(8) Fermer l'enregistrement des variables globales

Les variables soumises en PHP, y compris les variables soumises via POST ou GET, seront automatiquement enregistrées en tant que variables globales et peuvent directement 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 vous devez utiliser des méthodes raisonnables pour obtenir les variables correspondantes, comme l'obtention de la variable var soumise par GET,

puis vous devez utiliser $_GET['var'] pour l'obtenir , les programmeurs PHP devraient y prêter attention.

(9) Ouvrez magic_quotes_gpc pour empêcher l'injection SQL

L'injection SQL est un problème très dangereux Dans de petits cas, le backend du site Web sera envahi, et dans des cas plus graves. Dans certains cas, le serveur entier tombera.

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

Par exemple. convertir ' en ' Attendez, cela joue un rôle important dans la prévention de l'injection SQL. 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 génère une erreur lorsqu'il n'est pas connecté à la base de données. ou dans d'autres circonstances. Généralement, le message d'erreur contiendra les informations de chemin du script PHP avant

ou l'instruction SQL de la requête. Ce type d'informations est dangereux s'il est fourni aux pirates, il est donc généralement recommandé. que les serveurs désactivent les invites d'erreur :

display_errors = Off

Si vous souhaitez afficher les messages d'erreur, assurez-vous de définir le niveau d'affichage des erreurs, par exemple, affichez uniquement les informations au-dessus des avertissements :

error_reporting = E_WARNING & E_ERROR

Bien sûr, je recommande toujours de désactiver les invites d'erreur.

(11) Journal des erreurs

Il est recommandé d'enregistrer les informations d'erreur après avoir désactivé display_errors pour faciliter la recherche de la raison du fonctionnement du serveur :

log_errors = On

Définissez également le répertoire dans lequel le journal des erreurs est stocké. Il est recommandé que le journal racine d'Apache soit stocké ensemble :

error_log = D:/usr/local/apache2/logs/php_error. .log

Remarque : Le fichier doit permettre à l'utilisateur et au groupe Apache d'avoir des autorisations en écriture.

Télécharger les privilèges MYSQL

Créer un nouvel utilisateur tel que mysqlstart

net user mysqlstart ****microsoft /add

net localgroup users mysqlstart / del

n'appartient à aucun groupe

Si MYSQL est installé dans d:mysql, donnez à mysqlstart les autorisations de contrôle total

puis définissez les propriétés du service de MYSQL dans le système service , dans les propriétés de connexion, sélectionnez cet utilisateur mysqlstart et entrez le mot de passe, OK.

Redémarrez le service MYSQL, puis MYSQL fonctionnera avec de faibles privilèges.

Si Apache est construit sur une plate-forme Windos, nous devons prêter attention à une autre chose. Apache fonctionne avec les autorisations système par défaut

C'est effrayant et met les gens très mal à l'aise. nous donnerons à Apache Réduire les autorisations.

net user apache ****microsoft /add

net localgroup users apache /del

ok Nous avons créé un utilisateur apche qui n'appartient à aucun groupe.

On ouvre le gestionnaire de l'ordinateur, on sélectionne les services, on clique sur les propriétés du service Apache, on sélectionne se connecter, on sélectionne ce compte, on remplit le compte et le mot de passe créés ci-dessus,

Redémarrer le service Apache, ok, Apache fonctionne avec de faibles autorisations.

En fait, nous pouvons également définir les autorisations de chaque dossier afin que l'utilisateur Apache ne puisse effectuer que ce que nous voulons qu'il fasse, et créer un utilisateur en lecture-écriture distinct pour chaque répertoire.

Il s'agit également d'une méthode de configuration populaire utilisée par de nombreux fournisseurs d'hébergement virtuel. Cependant, cette méthode est excessive lorsqu'elle est utilisée pour empêcher cela.

Déclaration:
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