Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

169 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   50 Visites
   Note INTERNET : 18.6
    (3 Votants)
   0 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2006 - Pérennisation
PHP et la sécurité - Configuration & développement
[40 mn de lecture - paru le 6/1/2006 10:39:20 AM - Public : Confirmé]

Auteur

45925Fabien AGRANIER
Elève-Ingénieur Supinfo Bourgogne
Promotion SUPINFO 2008

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

1 Configuration de Apache/PHP

1.1 Gestion des erreurs

Qui n’est jamais tombé sur un site vous affichant une belle erreur PHP à cause d’une erreur de connexion, d’un fichier introuvable ou autre bug ? Cela vous paraît anodin ? Peut-être pour vous, mais pour d’autres, il s’agit là d’une mine d’informations déballées gratuitement quand à l’architecture de votre site et de son fonctionnement ! En effet, ces informations qui vous aident lorsque vous développez, vont aussi guider de tierces personnes dans leurs désirs de flibusterie. Il convient donc d’opter pour une configuration différente de PHP lorsqu’il est exécuté dans un environnement de développement que lorsqu’il est dans un environnement de production.

1.1.1 Environnement de développement

Dans un environnement de développement, il convient donc d’afficher l’ensemble des erreurs afin de pouvoir y apporter facilement les corrections nécessaires. Voici les instructions à placer dans un fichier .htaccess :

# On reporte toutes les erreurs (E_ALL = 2047)
php_value error_reporting 2047

# Les erreurs sont affichées à l’écran
php_flag display_errors on

1.1.2 Environnement de production

Au contraire, dans un environnement de production, aucune information ne doit apparaître à l’écran, elles doivent être loguées et transmises aux administrateurs réseaux. Voici les instructions à placer dans un fichier .htaccess :

# On reporte toutes les erreurs (E_ALL = 2047)
php_value error_reporting 2047

# Les erreurs ne sont pas affichées à l’écran
php_flag display_errors off

# Les erreurs sont loguées
php_flag log_errors on

# On logue les erreurs dans un fichier inaccessible de l’extérieur
php_value error_log /chemin-vers-votre-site/php_errors.log

<Files "php_errors.log">
Order deny,allow
Deny from all
</Files>

1.1.3 Informations supplémentaires

Manuel PHP – Gestion des erreurs
Manuel PHP – Error_reporting
Manuel PHP – Modifier la configuration

1.2 Exposition de PHP

Cette partie traite de la sécurité par l’obscurité, une des facettes les moins efficaces de la sécurité, mais qui peut appuyer une politique de sécurité forte sur une application critique.

1.2.1 Phpinfo()

De nombreux sites ont parmi leurs pages web, une d’entre elles qui appelle la fonction phpinfo(). Ces pages peuvent être livrées avec certains scripts pour faciliter leur installation, ou créées par le développeur pour mieux connaître son environnement.
Cependant, ces pages recèlent d’informations quant aux versions de vos applicatifs (version apache, version php, etc..), aux emplacements de vos fichiers importants (chemin du site, chemin du log d’erreurs), et aux fonctions désactivées sur votre système.
Il convient donc de restreindre leur accès ou de les supprimer de votre système de fichier.

1.2.2 Entêtes HTTP : expose_php

PHP injecte dans les entêtes des réponses http une ligne indiquant sa version, cette information peut de la même manière que phpinfo() apporter des informations supplémentaires à une personne malintentionnée.

Voici un exemple d’entêtes d’une réponse HTTP :

HTTP/1.1 200 OK
Date: Sun, 30 Apr 2006 16:36:05 GMT
Server: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.8a PHP/5.1.2
X-Powered-By: PHP/5.1.2
Last-Modified: Sun, 30 Apr 2006 15:14:52 GMT
Content-language: en
Connection: close
Content-Type: text/html; charset=utf-8

La ligne en rouge est celle ajoutée par php, pour la supprimer, il faut modifier le php.ini :

# Désactive l’entête spécifiant la version de PHP
expose_php off

1.2.3 Entêtes HTTP : ServerTokens

La ligne en orange dans les entêtes HTTP est elle inscrite directement par Apache qui un peu à la manière de phpinfo indique sa version, et les versions des modules utilisés.

Pour supprimer ces informations, il faut modifier httpd.conf :

# Valeurs possibles Full | OS | Minor | Minimal | Major | Prod
# Full donne le plus d’informations, Prod le moins.
# Valeur par défaut : Full

ServerTokens Prod

1.2.4 Informations supplémentaires

PHP Secure – phpinfo
Manuel PHP – Masquer PHP
Manuel Apache – ServerTokens

1.3 Directive register_globals

1.3.1 Explications

La directive PHP register_globals quand elle est activée, enregistre toutes les variables provenant de l’extérieur dans les variables internes. Ainsi toutes les variables des formulaires (POST/GET/FILE) et des cookies sont accessibles directement en précédant leur nom d’un dollar.

Ceci avait pour but de simplifier les scripts, puisqu’il n’y avait qu’un seul moyen d’accéder aux variables. Cependant, lorsque cette directive est activée, il est impossible de savoir d’où provient le contenu de la variable et peut ainsi conduire à de nombreux problèmes de sécurité du fait que l’initialisation des variables n’est pas obligatoire. Cette directive a donc été désactivée par défaut à partir de php 4.2

1.3.2 Exemple

Voici un exemple qui conduit à une faille de sécurité si la directive register_globals est activée.

  1. <?php
  2.     if(checkUser($login, $pass)) $valid = true;
  3.  
  4.     if($valid)
  5.         include 'valid_users.php';
  6.     else
  7.         include 'visitors.php';
  8. ?>

En effet, si la page est appelée comme ceci http://domaine.com/faille.php?valid=1, la variable $valid prendra la valeur passée en paramètre et la condition ligne 4 inclura le fichier réservé aux utilisateurs valides.

1.3.3 Informations supplémentaires

Manuel PHP – Sécurité


Articles de la même catégorie

 Pages : Top


5 Visites
0 Commentaires
Connection to a TeamFoundationServer base and Declaration of WorkItem in ASP.NET
[20 mn de lecture - paru le 6/1/2006 10:37:58 AM - Public : Débutant]

En savoir plus


5 Visites
0 Commentaires
Presentation of Microsoft Expression Interactive Designer
[30 mn de lecture - paru le 6/1/2006 10:26:14 AM - Public : Débutant]

En savoir plus


18 Visites
0 Commentaires
Using WIAAUT library
[15 mn de lecture - paru le 6/1/2006 10:15:38 AM - Public : Débutant]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :