PHP 04 2010 FR
PHP 04 2010 FR
PHP 04 2010 FR
HOSTING
NEXT LEVEL
Tous les tarifs s‘entendent HT et sont soumis aux conditions de vente de Hetzner Online AG.
Les prix sont susceptibles d‘être changés. Tous droits réservés par les fabricants respectifs.
OUTILS
8 Les Google Webmaster Tools 16 Administrer votre serveur Debian par SSH
Eric Vincent Faure Yann
Google met à disposition des webmasters toute une série d’outils Debian est une distribution Linux non commerciale lancée par Ian
pour les aider. Ces outils évoluent dans le temps et il est néces- Murdock. Debian est souvent utilisé grâce à sa réputation de distri-
saire d’y passer régulièrement du temps. Voyons les différentes bution extrêmement stable. Dans cet article, vous allez apprendre
étapes pour découvrir ces outils qui devraient vous permettre comment installer et configurer un serveur Debian avec Apache,
d’améliorer votre site, aussi bien sur le visuel que sur le référen- PHP, MySQL, PHPMyAdmin, Webmin ainsi que Proftpd par SSH.
cement.
DOSSIER
20 AJAX facile avec JQuery et Zend Framework
Guillaume Ponçon
jQuery est une bibliothèque Javascript. Intégrée à Zend Fra-
mework, elle permet de développer rapidement des interfaces
riches et dynamique. Cet article utilise le lien AJAX proposé par
ZendX_JQuery, utilisé à travers le modèle MVC du framework.
PRATIQUE
24 CLI : PHP en ligne de commande
Jérémy Rafflin
PHP est habituellement utilisé pour la création de sites ou de ser-
vices web, mais CLI permet d’utiliser PHP en ligne de commande
dans la console d’un système d’exploitation. CLI est un outil sûr
et très utilisé pour créer des scripts shell (script système). Grâce
à cet article vous découvrirez l’utilisation de PHP en ligne de com-
mande et avec des scripts.
4
www.phpsolmag.org
5
Actualités
Joomla 1.5.7
La nouvelle version du CMS Joomla vient
de sortir, apportant de nombreux correc- Eye OS
E
tifs de sécurités. Par ailleurs, Depuis la ver-
ye OS est une application vous per- le glisser-déposer et le couper / copier / coller
sion 1.5.16, Joomla est compatible PHP 5.3.
Cette version a été entièrement traduite en mettant d’avoir votre propre bureau entre les différentes fenêtres.
Français. virtuel à travers le web. Cette appli- Cette nouvelle version propose une évolu-
http://www.joomla.fr cation a été développée en PHP/Javascript tion de l’outil administration et de la suite
et vient de sortir en version 2. La version de bureautique avec un affichage en temps réel.
PHP 5.3.2
La version de PHP 5.3.2 apporte quelques base comprend un système de fichiers pour La demande de documents a été amélioré
évolutions et correctifs. Mais maintenant les utilisateurs et 5 applications. Ces applica- et vous pouvez travailler avec l’application,
le mode SSL est supporté avec le driver tions sont orientées bureautiques comme des créer, enregistrer et ouvrir les documents.
MySQLND. logiciels de traitements de textes, de feuilles de
http://www.php.net calculs, de calendrier... et en 19 langues.
XMP PHP Toolkit Mais comme tout bureau, un gestionnaire
XMP PHP Toolkit est une nouvelle exten- de fichiers est proposé vous permettant de
sion pour PHP 5. Il s’inspire de XMP Toolkit gérer vos fichiers, de les manipuler comme
d’Adobe pour lire et écrire les métadonnées
dans les fichiers multimédia et ne tourne
actuellement que sous GNU/Linux.
http://xmpphptoolkit.sourceforge.net/
Posh 2.2
La nouvelle version de Posh va vous per-
mettre de faire évoluer votre portail par
de nombreuses options. Pour rappel,
Posh est une API réalisée en PHP/MySQL/
Ajax pour vous permettre de réaliser fa-
cilement un portail personnalisé d’actua-
lités ou de flux pouvant vous intéresser.
Cette nouvelle version propose de nom-
breuses extensions avec la possibilité de
se connecter vers d’autres applications
comme Joomla, Alfresco, Google docs,
phpBB, LDAP... pour vous permettre de 15 ans avec PHP
L
widgetiser ces applications dans votre e 8 juin 2010 est l’anniversaire de la local et aussi un langage en ligne de comman-
portail.
http://www.portaneo.com/websites/home/ naissance du langage PHP. 2 versions de pour exécuter des programmes ou devenir
portal/index.php sont maintenues : PHP 5.2.10 et 5.3.2. une plate-forme. Il possède l’avantage de pou-
Ces versions sont liées à la sortie de PHP 5.3 voir communiquer avec l’ensemble des autres
PHP 6 suspendu faisant apparaître de nombreuses évolutions langages et propose un large choix d’exten-
Rasmus Lerdorf, par un communiqué,
et améliorations du langage. Ces évolutions sions permettant d’avoir un outil modulaire.
a annoncé que le chantier de la version
6 était dans l’impasse et par conséquent voient l’apparition des Namespaces, la librairie Cette modularité permet d’être apprécié
cette branche a été stoppée. La décision MySQLND. par le monde entier. Les analyses et sonda-
de ce choix difficile est provoquée par l’in- Mais il est important de faire un petit ré- ges montrent que le langage PHP se trouve
tégration de l’unicode qui montre que ce sumé de 15 ans de PHP et surtout pourquoi dans le peloton de tête au coté des langages
chantier est plus dur à mettre en place par
il est devenu le langage incontournable dans comme le Basic et le C. En 2008, PHP était
rapport aux prévisions.
Bien entendu les contributeurs de cette les applications dynamiques Webs. déployé sur 35,1 millions de serveurs (source
branche souhaitent se laisser un peu de La première page publié en PHP a été réa- nexen.net).
temps pour trouver une nouvelle évolu- lisé par Rasmus Lerdof avec son code source Son image est un langage populaire et une
tion. Les évolutions prévues pour PHP 6 pour le monde entier puisse l’utiliser et sur- mascotte existe autour du langage. Il s’agit
sont la sécurité, la POO et l’évolution de
tout en profiter. Régulièrement de nombreu- d’un elePHPant dont l’origine vient de Vin-
PECL devraient être intégrée dans les pro-
chaines versions. ses évolutions ont été apportés pour répondre cent Pontier (El roubio) et la peluche distri-
http://news.php.net/php.internals/47120 aux différentes attentes. buée à travers un site internet www.eleph-
Deux après, Rasmus Lerdof fut rejoint par pant.com
Piwigo 2 Andi Gutmans et Zeev Suraski pour redéve- Pour cette année exceptionnelle, l’AFUP
Piwigo permet de créer facilement une
galerie d’images. Elle se différencie des lopper le coeur de PHP sous une version 3. (l’Association Française des Utilisateurs de
autres par la présence d’un moteur de Dès sa sortie et pour répondre aux attentes, un PHP) proposera un grand rendez-vous pour
Template, 100 % en UTF-8, sous PHP 5 / nouveau coeur a été développé, appelé Zend marquer les 15 ans de PHP au forum PHP.
MySQL 5. Une autre approche d’ajouter Engine qui est utilisé depuis la version 4 de
des photos sans passer par le mode FTP
PHP. Depuis la version 5 de PHP, le développe-
et de nombreux Plugins. Une version
démo est disponible sur le site pour se ment objet a vu le jour, tout en gardant tous les
rendre compte du résultat et des possibi- avantages qui ont fait le succès de PHP 4.
lités de l’API : L’utilisation de PHP permet d’être à la fois
http://fr.piwigo.org/ un langage interprété dans un environnement
6 4/2010
Actualités
PHP Speedy
Il existe différentes manières d’optimiser
Web2project les pages web pour limiter le temps de
W
chargement comme PHP Speedy. Il s’agit
eb2Project est une nouvelle ap- • Présence d'un diagramme de Gantt pour
d’un petit script qui s’insère dans vos pages
plication et plus exactement un gérer vos projets. et va vous permettre de gagner du temps
PMS (Project Management System) • Présence d'un calendrier indiquant les d’affichage.
et tourne sous un environnement Apache/ tâches et évènements. http://aciddrop.com/php-speedy/
PHP/MySQL en Open source. Son but est de
EZ publish 4.3
vous permettre de gérer facilement vos projets. L'application vous sera encore plus utile si Le CMS eZ Publish propose dans sa nouvel-
La gestion de projet devient utile lorsque plusieurs personnes interviennent dans un le version, une nouvelle interface d’admi-
vous devez gérer plusieurs projets en simul- même projet, mais aussi de répartir la charge nistration, un système étendu de gestion
tané. La majorité des projets se décompose de et la façon de programmer comme l'utilisa- des commentaires, de nombreuses amélio-
45% de très petits, 20 % moyens, et une dou- tion de la Programmation Orientée Objet. rations concernant les extensions comme
eZFlow et eZfind, et une amélioration des
zaine de gros. Le projet propose sur son site internet, une performances. Par ailleurs, de nouvelles
Web2Projet va répondre à toutes ces attentes version de démonstration pour effectuer les fonctionnalités sont apparues comme
et proposent de nombreuses caractéristiques : tests, mais aussi une documentation en ligne eZ Teamroom.
et un forum http://ez.no/fr/
• Infrastructure sécurisée sur le web. http://web2project.net/
Forum PHP 2010
• Gestion de plusieurs projets en simultané. Pour les 10 ans de l’AFUP, l’Association
• Gestion d'ajout et de suppression de mo- Française des Utilisateurs de PHP a dévoilé
dules suivant vos besoins. les dates du prochain Forum PHP : 9 et 10
• Centralise le projet de communication. novembre 2010, à la cité des sciences de
Paris.
http://www.afup.org
Gomodo
Chive Gomodo est un nouveau type de moteur
P
our administrer les bases de don- Après son installation, les fonctionnalités de recherche pour les développeurs. Il
propose de rechercher et de trouver plus
nées MySQL, il existe phpMyAdmin, principales sont proposées : facilement des informations venant des
très répandu. Il existe de nombreu- documentations officielles sur les langages
ses alternatives permettant de faire comme • Création et gestion d'une base de don- (PHP, HTML, Javascript, CSS) mais aussi Fra-
Chive. nées. meworks (Jquery, Prototype). Ce moteur
Chive est une application, réalisée en PHP • Navigation. peut se greffer dans la barre de recherche
Google pour vous aider et évolue réguliè-
5 et Ajax, sous licence GPL v3 et a pour but • Gestion utilisateur. rement.
l’administration des bases de données MyS- • Editeur avec coloration syntaxique. http://gomodo.net/
QL 5 avec un environnement Apache (mod_ • Import / Export.
rewrite actif). Actuellement il fonctionne que Skipfish
Skipfish est un scanner de sécurité pour
sous linux mais devrait fonctionner sur les Lors des manipulations des requêtes SQL,
les applications web que Google propose.
autres systèmes prochainement. une coloration syntaxique vous permettra de Il propose les mêmes fonctionnalités que
L’ergonomie est l’un des points qui a été repérer les erreurs éventuelles lors de vos dé- Nmap ou Nessus mais en beaucoup plus
mis en avant par cette API, disposant de de- veloppements. rapide. Les différents tests effectués avec
sign différents et de skins pour personnaliser cet outil affichent l’exécution de 2000 re-
quêtes HTTP par seconde. Bien entendu,
votre propre environnement. Il se veut plus
il permet de repérer les risques d’attaque
souple et donc efficace pour administrer les du type Cross-site scripting (XSS), injection
bases de données et basé sur le modèle MVC SQL, XML...
et tests unitaires. http://code.google.com/p/skipfish/
Spip 2.1
Cette nouvelle version s’ouvre vers la modu-
larisation des fonctionnalités sous la forme
d’extensions et de plugins, Mais Spip a subi
aussi d’autres évolutions comme une amé-
lioration du cache et plus de sécurité. Il est
aussi compatible avec PHP 5.3 et intègre la
bibliothèque Jquery 1.4.2 et pclzip 2.8.2. Il
est maintenant plus extensible et plus struc-
turé avec une amélioration du débuggage.
http://www.spip.net
Xtrabackup 1.1
Xtrabackup est une solution alternative
à InnoDB Hit Backup pour effectuer des
sauvegardes à chaud pour MySQL 5.0.
http://www.percona.com/
www.phpsolmag.org 7
Outils
Les Google
Webmaster Tools
Google n'est pas qu'un moteur de recherche, il propose
également de nombreux outils. Intéressons-nous
à un de ces outils : Google Webmaster Tools. Cet article
vous propose de vous présenter le contenu de ses outils,
qui sont gratuits.
votre page d’accueil (index.html ou index.htm
Cet article explique : Ce qu’il faut savoir : ou index.php) puis transférez là sur le serveur
• Les outils pour webmasters de Google. • Accéder au serveur de son site. de votre site. A l’écran, rassurez-vous, absolu-
• Avoir un éditeur de texte. ment rien ne change. Le transfert étant effec-
tué, revenez sur la page des outils et cliquez
sur Verify. Maintenant, votre site est reconnu
par Google.
A noter que Google propose une autre mé-
à avoir. Voir la figure 2. La Figure 2 présente thode pour valider votre site. On vient de voir
l’état de votre site et ce qu’il faut faire pour la méthode Meta tag, vous pouvez choisir
Niveau de difficulté qu’il soit validé par Google. Upload an HTML file. Le principe est de trans-
Afin de valider votre site, il faut ajouter férer sur votre serveur un fichier transmis par
à votre page d’accueil la ligne de code présen- Google et non pas d’ajouter une seule ligne de
tée à l’écran. Procédez à la modification de code. Le reste de la validation reste identique.
G
oogle met à disposition des web-
masters toute une série d’outils
pour les aider. Ces outils évoluent
dans le temps et il est nécessaire d’y passer ré-
gulièrement du temps. Voyons les différentes
étapes pour découvrir ces outils qui devraient
vous permettre d’améliorer votre site, aussi
bien sur le visuel que sur le référencement.
8 4/2010
Google Webmaster Tools
www.phpsolmag.org 9
Outils
rapide que spectaculaire de vos visites par les tes qui apparaissent à l’écran sont une mine ner une réflexion pour rectifier le tir car un
moteurs de recherches ! Google pourrait ne d’or. A gauche, on voit la liste des recherches mot clé peut être totalement hors sujet.
plus reconnaître vos pages donc vous n’aurez où notre site a été affiché, à droite, on a la liste Liens internes : nous visualisons ici la liste des
pratiquement plus aucun trafic via ce moteur des requêtes qui ont amenées une visite sur liens internes, c’est-à-dire la liste des liens de
de recherche qui a environ 85% du marché. notre site. On est également informé par des notre site vers notre site. On peut faire un tri,
Devant de telles conséquences, il serait dom- pourcentages et par la position dans les résul- on peut ici également cliquer sur le nombre de
mage de ne pas s’attarder sur ce changement tats de recherche. On peut également faire liens internes afin d’obtenir la liste des pages
d’adresse, surtout quand le temps de travail des tris sur chaque critère. qui ont amenée vers la page de référence.
n’est pas important. Liens vers votre site: nouvelle liste, qui don- Statistiques sur les abonnés : par exemple,
Paramètres : votre site étant validé, Google ne des éléments importants. On a la liste des si vous avez un flux RSS (ce qui serait bien
a procédé à quelques recherches et les affiche. liens de notre site triée par nombre de liens et intéressant !), Google Webmasters Tools
Logiquement, tout est bien renseigné et vous entrants. En cliquant sur le nombre de liens vous donne le nombre d’abonnés Google. En
n’aurez rien à faire dans cette partie. d’une page, on visualise tous les liens vers la consultant régulièrement les chiffres donnés,
page avec la date de visite. vous pourrez suivre les évolutions. C’est un
Étape 6 : Votre site sur le Web Mots clés : une liste, c’est bien mais un gra- élément moins important que les mots clés
La partie Configuration du site était plus dans phisme est également intéressant. Avec cette mais savoir si les flux intéressent les internau-
le domaine architecture, par contre la partie option, on visualise l’importance de certains tes est un autre paramètre à prendre en comp-
Votre site sur le Web est toute aussi importante mots trouvés lors de l’exploration du site par te et c’est un élément de valorisation d’un site.
et elle entre plus dans le concret des mots clés, Google. Avec cette option, ce n’est pas l’in-
du référencement et du travail à faire réguliè- ternaute qui influe avec ses recherches et ses Étape 7 : Diagnostic
rement. Parcourons les choix un à un. Voir la clics, c’est le robot de Google. Ainsi, on peut Autre partie, la partie Diagnostic. S’il n’est
Figure 6. La Figure 6 présente les différents voir concrètement si le mot que l’on voulait pas nécessaire de la surveiller, de venir la
choix du menu de Votre site sur le Web. mettre en avant a atteint l’objectif prévu ou consulter tous les jours, il est tout de mê-
Requêtes les plus fréquentes : pour les web- pas. Ici, à partir des 10 premiers mots clés me utile de la connaître et de la prendre en
masters qui ont un site de e-commerce, les lis- (10 étant donné à titre d’exemple), il faut me- compte de temps en temps. Une consulta-
tion mensuelle semble être un bon rythme
pour étudier les volumes. Voir la Figure 7. La
Figure 7 présente les différents choix du me-
nu de Diagnostic.
Erreurs d’exploration : seul l’onglet Web est
utile dans 99% des cas. Google vous dresse ici
toute une série d’éléments pouvant générer
des erreurs : robots.txt, sitemap, délai, HTTP,
inacessible, introuvable, non suivies. Le plus
souvent, c’est la partie introuvable qui sera
valorisée. Consultez cette partie plus en dé-
tails et maintenant que vous en êtes à ce ni-
veau dans cet article, vous savez quoi faire !
Comment ça non ? Créez une page 404 en
premier puis analysez les raisons de cet état
introuvable.
Statistiques sur l’exploration : par son robot,
Google arrive à établir des statistiques sur vo-
tre site : page explorées par jour, kilo-octets
téléchargés par jour et temps de télécharge-
ment d’une page. A noter que les chiffres pu-
bliés sont approximatifs. Dans le cas de mon
site, pour la partie Pages explorées par jour, les
données de Google sont entre 5 et 10 fois in-
Figure 5a. Les liens sur votre site que Google Figure 6. Les différents choix du menu de Votre férieures à la réalité. Je précise que pour le site
a qualifié d'importants site sur le Web en question je n’utilise pas Google Analytics.
10 4/2010
Google Webmaster Tools
Sur Internet
• http://www.google.fr/ – Le celèbre moteur de recherche Google,
• http://www.xml-sitemaps.com – Pour créer un sitemap,
• http://www.robotstxt.org/ – Pour en savoir plus sur le fichier robots.txt, en anglais.
Suggestions HTML : nouvelles statistiques, temps, vous aurez le message suivant : Google
plus pertinentes que dans le cas vu ci-dessus n’a détecté aucun logiciel malveillant sur ce site.
et il est possible d’avoir une charge de travail Performances du site : tout webmaster sait que
importante. Ici, vous avez donc toute une sé- le temps d’accès aux pages du site est un critère
rie de statistiques au niveau des Meta et des important pour fidéliser un internaute. Si les
title. La balise Meta obéit à des règles précises pages sont trop longues, l’internaute ne reste-
et Google vous précise les balises hors règle : ra pas, ne reviendra pas. Alors, autant prendre
balise en double, trop longues ou trop cour- en compte ce critère avec l’importance qu’il
tes. Procédé identique pour la balise Title. On a et avec les Google Webmasters Tools, nous
a des règles et quand ces règles ne sont pas res- avons un graphique de l’accès au site et des sta-
pectées, Google le dit : balise manquante, en tistiques de comparaison avec les autres sites
double, trop longue, trop courte, non infor- d’une façon générale. Les Google Webmaster
mative. Dernier élément : sur l’indexation. Tools vous donnent également toute une série
Google vous précise s’il a rencontré du conte- de travail à faire pour améliorer l’accès au site.
nu non indexable. Vous avez également comme suggestion d’ins-
taller l’outil Page Speed, qui fonctionne avec Fi-
Étape 8 : Labos refox. Cet outil fait partie de l’univers Firebug
Quatre choix sont possibles mais nous allons et son installation ainsi que son utilisation se
en détailler deux : Informations détaillées rela- font comme les autres outils de Firefox.
tives aux logiciels malveillants et Performances
du site. Voir la Figure 8. La Figure 8 présente Tableau récapitulatif des options
les différents choix du menu de Labos. les plus importantes
Informations détaillées relatives aux logiciels On a maintenant parcouru les Google Web-
malveillants : un jour , vous serez peut-être masters Tools. Dans le tableau 1, vous avez les
attaqué par un virus et Google peut ici vous 5 options les plus importantes avec pour cha-
aider à mieux le circonscrire. Cet outil permet cune d'elle, comment la trouver, des remar-
de déterminer quelles portions de code font ques et la périodicité recommandée.
qu’une page est considérée comme potentiel-
lement dangereuse par Google : injection de Conclusion
code, code malveillant. Pratiquement tout le Google met à disposition gratuitement
et sans ajout de code sur votre site une large
série d’outils. Ces outils sont d’une aide pré-
cieuse pour la gestion d’un site Internet, aussi
bien au niveau du référencement qu’au ni-
veau technique (page 404, fichier robots.txt,
fichier sitemap.xml).
S’il n’est pas utile de regarder ces outils
quotidiennement, il est nécessaire de faire
une passe régulièrement, surtout si votre site
est dans le secteur e-commerce. En outre, ces
outils peuvent aider les webmasters à faire des
présentations à des collaborateurs, à des chefs
de projet ou à des directeurs. Simple d’accès,
gratuits et bien documentés, les Google Web-
master Tools sont incontournables et il serait
dommage de ne pas les utiliser.
ERIC VINCENT
Informaticien de gestion de formation, Eric VIN-
CENT s’est orienté vers l’Internet dès son arrivée,
au début des années 2000. Il a rapidement créé
plusieurs sites Internet sur le sport. Ces sites cu-
mulent aujourd’hui plusieurs millions de pages
Figure 7. Les différents choix du menu de lues. Pour contacter l’auteur : ericvincent@no-
Diagnostic made.fr
www.phpsolmag.org 11
Projets
Préprocesseur
CSS
Cet article présente l’utilité et les possibilités
d’un préprocesseur CSS. Un outil pour générer
du CSS.
C
ela fait dix ans que les CSS existent, Pour comprendre l’intérêt d’un préproces- En développement, dès qu’un traitement
cependant nous en sommes prati- seur CSS, nous allons l’illustrer sur un cas nous parait répétitif, nous créons une fonc-
quement au point de départ en ter- concret comme un site qui change d’ambian- tion. Grâce au préprocesseur nous allons pou-
me d’optimisation. D’un site à un autre on ce au fur et à mesure des saisons : noël, été, voir créer des fonctions CSS.
préférera tout recommencer avec une copie soldes, … . Ce projet nous obligerait à avoir Prenons l’exemple d’une boîte flottante gé-
vierge, ou presque. deux feuilles de style : une pour la structure nérique. Comme c’est souvent le cas, on a be-
Dans le domaine de la programmation, on des blocs (largeur, positionnement,... ) et une soin de lui définir une largeur, mais aussi, afin
utilise des méthodes pour capitaliser et amé- autre pour les couleurs et les images du site. de corriger le bug du doublement de marge
liorer notre travail : MVC, KISS, ... Ce qui nous ferait répéter les sélecteurs CSS sur Internet Explorer 6 nous lui ajoutons un
Pourquoi ne pas adapter ces méthodes aux deux fois. display:inline. Le Listing 3 nous présente
CSS ? Peut-être parce que CSS n’est pas un Pour notre exemple, nous allons utiliser une fonction qui prendra en compte tous nos
langage de programmation ? Comment met- CSScaffold. Il n’existe aucun standard pour besoins.
tre en place du MVC avec du CSS ? C’est le moment dans l’écriture des CSS avec un Vous pouvez aussi réaliser des calculs pour
pour cela que depuis quelques années des préprocesseur, chaque projet va dans sa pro- déterminer une taille de marge, mettre des
projets de dynamisation de CSS émergent pre direction. J’ai choisi celui là car il est dé- conditions if pour tester votre code et créer
un peu partout. On les appelle les prépro- veloppé en PHP, rapide à mettre en place, et des boucles pour optimiser vos fonctions.
cesseurs CSS. Leur objectif est de produire suffisamment mature pour être utilisé dans Avec tout cela vous allez pouvoir créer
du CSS en utilisant des variables, des fonc- un site en production. une véritable bibliothèque CSS suivant vos
12 4/2010
En librairie Préprocesseur CSS
Vous ne développerez
plus comme avant !
La « bible » française sur PHP
avec de nombreux retours
d’expérience et de cas pratiques.
Recommandé par :
Et aussi
NOUVELLE ÉDITION
Objectif sécurité avec Allez plus loin avec
Damien Seguy (AFUP, PHP Guillaume Ponçon (AFUP,
Québec) et Philippe Gamache Web TV PHPTV).
(phportail.net). Un condensé d’expertise
pour tous les développeurs. N’oubliez pas
votre mémento !
Sécurité PHP 5 et MySQL
2e édition Best practices PHP 5
286 pages – 32 € 490 pages – 39 € La substantifique
mœlle de PHP
et SQL par Cyril
Pierre de Geyer et
Mieux développer en Guillaume Ponçon.
Les meilleures pratiques de PHP avec Symfony 1.2
développement web avec et Doctrine. Par Fabien
PHP 5 et le Zend Framework. Potencier (Sensio Labs) et Mémento PHP et SQL
14 pages – 5 €
Par Julien Pauli (AFUP, Anaska) Hugo Hamon (Apprendre-
et Guillaume Ponçon. PHP.com).
www.editions-eyrolles.com/Theme/807065
Découvrez tous nos livres sur PHP et téléchargez gratuitement des extraits !
www.phpsolmag.org 13
Projets
14 4/2010
Rejoignez
RejoignezleleClub
Club.PRO
.PRO Pour
Pourplus
plusdederenseignement
renseignement: [email protected]
: [email protected]
Stoneld Inworld
Stoneld Inworld propose aux entreprises des solutions globale d’intègration d’Internet et des Univers
Virtuels dans leur stratégie de développement. Au-delà de ses services, la société consacre 30% de
ses ressources à des travaux de R&D sur le e-Commerce et le e-Learning dans les Mondes Virtuels.
COGNIX Systems
Conseil, conception et développement d’applications évoluées pour les systèmes d’informations Internet/
intranet/extranet. Alliant les compétences d’une SSII et d’une Web Agency, Cognix Systems conçoit des
applicatifs et portails web à l’ergonomie travaillée et des sites Internet à forte valeur ajoutée.
http://www.cognix-systems.com
Figure 1. Exemple de site utilisant une grille de mise en place
Anaska Formation
Sur Internet Anaska est le spécialiste des formations sur les technologies OpenSource. En partenariat avec MySQL
AB, Mandriva, Zend et d'autres acteurs de la communauté, Anaska vous propose un catalogue de plus
• http://github.com/anthonyshort/csscaffold – Site du projet de 50 formations dédiés aux technologies du Libre.
CSScaffold, http://www.anaska.com
• http://wiki.framwurk.org/documents:csspp/ – Un préprocesseur
CSS en PHP,
• http://www.lesscss.org – Un autre préprocesseur en RUBY,
• http://github.com/leafo/lessphp – La version PHP du même pré-
WEB82
Création et hébergements de sites web pour particuliers, associations, entreprises, e-commerce.
processeur, Développement entierement aux normes W3C (www.w3.org) de sites web de qualité, au graphisme
• http://960.gs/ – Si vous souhaitez découvrir le framework soigné et employant les dernieres technologies du web (PHP5, MySQL5, Ajax, XHTML, CSS2).
960.gs, http://www.web82.net
• http://www.blueprintcss.org/ – Un autre système de grille,
• http://developer.yahoo.com/yui/grids/ – YUI CSS, actuellement
dans sa version 2. Core-Techs
Expert des solutions de gestion et de communication d’entreprise en Open Source, Core-Techs
conçoit, integre, déploie et maintient des systemes de Gestion de Contenu Web, de Gestion
Avec CSScaffold on définit en premier la taille du conteneur, en- Documentaire, de Gestion de la Relation Client (CRM), d’ecommerce et de travail ollaboratif.
http://www.core-techs.fr
suite le nombre de colonnes désirées et ensuite la taille des gouttières
de chaque colonne. Ces gouttières sont des marges qui nous permet-
tront de séparer chaque colonne de façon visible. Automatiquement POP FACTORY
le préprocesseur calculera la largeur que fera chaque colonne. PoP Factory,SSII spécialisée Web. Développement de solutions applicatives spéciques ; offre de
Faisons un exemple avec le Listing 5, nous voulons un conteneur solutions packagées : catalogue numérique, e-commerce, livre/magazine numérique, envoi SMS. Nous
de 960px ( rendu idéal pour un affichage en 1024px ) , et 12 colon- accompagnons nos clients tout au long de leur projet : audit, conseil, développement, suivi et gestion.
http://www.popfactory.com / [email protected]
nes avec des gouttières de 10px. Nous aurons des colonnes de 80px.
On voit ensuite dans le Listing 6 ce qui sera généré par CSScaffold.
Ce qui nous fait en largeur (140+10+10)+(780+10+10) = 960px.
En réalité cet exemple n’est pas pris au hasard. Il correspond exac-
Blue Note Systems
Spécialistes en CRM Open Source, nous proposons une offre complète de prestations sur la
tement aux paramètres de 960.gs. Ainsi ceux qui sont déjà habitués solution SugarCRM. Notre valeur ajoutée réside dans une expertise réactive et une expérience des
à un système de grille retrouveront facilement leurs marques. problématiques de la GRC. Nous vous aidons à tirer le meilleur parti de votre solution CRM.
http://www.bluenote-systems.com
Conclusion
Dans un cadre professionnel, on notera la puissance des préproces-
seurs CSS, mais attention aux feuilles qui seront générées : elles peu- Intelligence Power
Conseil, Expertises, Formations et Projets E-business centrés au tour du cśur de métier : la Business
vent se retrouver plus lourdes si on n’y prend pas garde. En effet, sans Intelligence. Intelligence Power vous propose des solutions innovantes pour aligner la technologie sur
regard directe avec la feuille CSS finale, on peut générer des codes la stratégie de votre entreprise.
conséquents. C’est une véritable solution pour intégrateur profes- http://www.intelligencepower.com
sionnel mais un piège pour un débutant.
Un jour on pourrait imaginer que le code utilisé pour le prépro-
cessing CSS soit directement interprété par le navigateur internet. Web Alliance
Vous souhaitez être en première page des moteurs de recherche ? Rejoignez-nous, 100% des clients
C’est peut-être ça le futur de CSS... Web Alliance sont en 1ère page de Google. Web Alliance, société de conseil spécialisée dans le
référencement internet, vous propose son expertise (référencement, liens sponsorisés, web-marketing).
www.web-alliance.fr
Club.PRO
Club .PRO
AURÉLIEN MASFRAND
L’auteur travaille depuis 3 ans en tant que développeur de site Internet. De
plus, il conçoit des sites accessibles suivant les recommandations actuelles.
www.phpsolmag.org 15
Projets
Administrer
votre serveur Debian par SSH
Debian est une distribution Linux non commerciale
lancée en 1993 par Ian Murdock avec le soutien
de la Free Software Foundation, composée uniquement
de logiciels libres ; Debian est souvent utilisé grâce
à sa réputation de distribution extrêmement stable.
get install libapr1 apache2 apache2.2-common
Cet article explique : Ce qu’il faut savoir : apache2-utils libapache2-mod-chroot libapa-
• Dans cet article, vous allez apprendre com- • Avoir quelques connaissances sous Linux. che2-mod-php5 apache2-mpm-prefork libapa-
ment installer et configurer un serveur De- • Connaître le fonctionnement de PHP / SQL. che2-mod-auth-pam libapache2-mod-auth-sys-
bian avec Apache, PHP, MySQL, PHPMyAd- group. Si vous souhaitez par la suite utiliser
min, Webmin ainsi que Proftpd par SSH. perl ou python avec apache au lieu de php5, il
suffit d’installer les modes souhaités :
D
ans cet article, nous utiliserons le Et suivez les instructions. Vous devriez obte- tall libapache2-mod-auth-mysql. Notre serveur
protocole SSH (Secure Shell) qui nir un résultat similaire à la Figure 1. Apache est maintenant opérationnel. Il suffit
est un protocole sécurisé utilisé Mettez à jour votre serveur avant de pour- de vérifier en allant en http sur notre serveur.
pour crypter les informations circulant sur suivre : apt-get update && apt-get upgrade. Voici ce que vous devriez avoir (voir Figure 2).
un réseau utilisant le protocole en ques- Ensuite nous allons commencer par instal- Maintenant, nous allons créer un utilisa-
tion. Toutes les images sont disponibles ler Apache avec le mod chroot pour éviter teur avec la commande adduser pour redi-
à télécharger sur le site phpsolmag.org. que les utilisateurs du serveur puissent na- riger la page par défaut d’Apache vers les pa-
Connectez vous à votre serveur par SSH viguer ailleurs que dans leur répertoire : apt- ges de cet utilisateur. Pour ma part j’utiliserai
qui est normalement juste installé grâce
à l’utilisateur SSHD ou openssh-server :
ssh root@adresseipdevotreserveur
ssh [email protected] -p 22
16 4/2010
Debian
mkdir /home/shock/public_html
nano /home/shock/public_html/index.html
nano /etc/apache2/sites-available/default
www.phpsolmag.org 17
Projets
étant toujours mon utilisateur. Il faut aussi Nous devons par la suite éviter que les uti-
penser à modifier le chemin /var/www/ en des- lisateurs du serveur puissent remonter les ré- Sur Internet :
sous par notre chemin (voir Figure 6) et refai- pertoires par mesure de sécurité, éditons pro-
• http://www.debian.org/,
re la même opération pour default-ssl (https). ftpd.conf. • http://doc.ubuntu-fr.org/ssh,
Ensuite nous allons sur notre serveur en • http://doc.ubuntu-fr.org/proftpd,
http et en https pour vérifier que la page in- nano /etc/proftpd/proftpd.conf • http://www.webmin.com/,
dex.html de l’utilisateur se charge bien à la • http://guides.ovh.com/guides#link10.
place de la page par défaut d’Apache. Si oui, Nous recherchons cetteligne : DenyFilter \*.*/
nous pouvons continuer, si non, vous devez et nous ajoutons ces deux lignes en dessous de
recommencer l’opération précédente. Pour celle ci : ple : https://188.165.41.250:10000/. L’utili-
finir la configuration d’Apache, il faut activer sateur est root, et le mot de passe est celui de
les répertoires /home/nomdelutilisateur/pu- DefaultRoot ~ l’utilisateur root, vous devez maintenant voir
blic_html pour tous les utilisateurs ajoutés DefaultChdir ~ l’interface de webmin comme sur la Figure 7.
par la suite : a2enmod userdir. Votre serveur est maintenant totalement
Pour ajouter un utilisateur, il suffit de faire Ainsi que le user et le group : opérationnel, il suffit maintenant de créer
un adduser et de créer un répertoire public_ une base de données pour chaque utilisateur
html dans son répertoire comme fait précé- User www-data pour que celui puisse avoir un accès à php-
demment avec l’utilisateur shock. Le répertoire Group www-data myadmin. Pour ajouter un utilisateur sur le
de chaque utilisateur est maintenant accessible serveur, nous devons faire ceci (je prendrai
par le net en tapant ceci dans la barre d’adres- www-data correspondant à l’utilisateur comme nom d’utilisateur, l’utilisateur gu-
se : http://ipdevotreserveur/~nomdelutilisateur/. d’Apache. tixlord :
Exemple pour ma part : http://188.165.41.250/ Nous enregistrons avec ctrl+x et nous relan-
~shock/. çons le service proftpd : /etc/init.d/proftpd adduser gutixlord && mkdir /home/gutixlord/
restart. Vous pouvez désormais vous connec- public_html/
Installation et configuration ter à votre serveur en ftp en utilisant le nom
de Proftpd et de Webmin d’utilisateur et le mot de passe voulu. Pour Ensuite il faut se loguer en root sur phpmyad-
Nous allons maintenant installer Proftpd. moi, ça sera shock et mon mot de passe. Dès min donc : http://188.165.41.250/phpmyad-
Tout d’abord, nous installons le paquet. qu’un utilisateur sera ajouté sur le serveur min/ pour mon serveur.
avec la commande adduser, proftpd le pren- Et exécuter une commande sql pour ajou-
apt-get install proftpd dra en compte, apache aussi. ter un utilisateur, voici la commande en ques-
Nous avons donc un serveur opérationnel. tion à modifier selon l’utilisateur :
Proftpd vous propose soit de s’installer en ser- Il nous suffit maintenant d’installer Webmin
vice inetd (Threadé) soit indépendamment : pour avoir une administration complète du CREATE USER ‘gutixlord’@’%’ IDENTIFIED
à vous de choisir en fonction de vos besoins. serveur par le web de façon sécurisée. apt-get BY ‘lemotdepassevoulu’;
La version threadée n’exécutera que le service install perl libnet-ssleay-perl openssl libauthen- GRANT USAGE ON * . * TO ‘gutixlord’@’%’
proftpd à la demande d’une connexion en ftp pam-perl libpam-runtime libio-pty-perl libmd5- IDENTIFIED BY ‘lemotdepassevoulu’ ;
sur le serveur avec une petite perte de temps perl && cd /home/ && wget http://prdownloads. CREATE DATABASE IF NOT EXISTS `gu-
à chaque connexion mais diminuera les res- sourceforge.net/webadmin/webmin_1.510_all. tixlord` ;
sources prises par le serveur contrairement deb && dpkg --install webmin_1.510_all.deb GRANT ALL PRIVILEGES ON `gutixlord` .
à la version indépendante qui sera plus rapide && rm webmin_1.510_all.deb * TO ‘gutixlord’@’%’;
lors d’une connexion mais qui sera en perma- Webmin est maintenant accessible sur le Vous devriez avoir un résultat ressemblant à
nence lancée sur le serveur. port 10000 de votre serveur en https. Exem- la Figure 8.
FAURE YANN
Faure Yann est un développeur passionné de sé-
curité informatique depuis plusieurs années, pro-
grammant dans plusieurs langages, il aimerait
poursuivre ses études dans la programmation
ou dans la sécurité informatique. Si vous souhai-
tez me contacter, vous pouvez m’envoyer un mail
Figure 5. PHPMyAdmin à cette adresse : [email protected].
18 4/2010
Debian
www.phpsolmag.org 19
Dossier
AJAX facile
avec JQuery et Zend Framework
jQuery est une bibliothèque Javascript. Intégrée
à Zend Framework, elle permet de développer rapidement
des interfaces riches et dynamique. Cet article utilise
le lien AJAX proposé par ZendX_JQuery, utilisé à travers
le modèle MVC du framework.
Création de la page Album
Cet article explique : Ce qu’il faut savoir : Photo
• Comment faire des liens AJAX rapidement • PHP 5 orienté objet. Dans un premier temps, développons une
avec ZendX_JQuery. • Les bases de Zend Framework, en particu- page web minimale utilisant les composants
• Comment rendre votre interface web plus lier l'implémentation MVC. Zend_Controller et Zend_View. Si vous dis-
dynamique et attrayante. posez déjà d’une implémentation MVC basée
• Comment mettre en place une base solide sur ces composants, vous pouvez bien enten-
pour développer encore plus vite en AJAX. du l’utiliser.
Commençons par télécharger les sources
de Zend Framework que vous trouverez sur
mework. Attention : si vous téléchargez les le site officiel :
sources minimales, les composants alterna- http://framework.zend.com. Une fois le pa-
Niveau de difficulté tifs préfixés par ZendX risquent de ne pas quetage téléchargé et déployé, nous pou-
être fournis. Vous ne pourrez donc pas utili- vons utiliser Zend_Tool pour générer une
ser les classes jQuery utiles à la mise en place architecture minimale, avec la commande
de l’application exemple. suivante :
L
e principal intérêt des interfaces ri- D’autre part, rappelons qu’une bonne
ches (RIA, AJAX) pour une applica- connaissance du modèle MVC de Zend Fra- /web/bin/zf.sh create project /web/myapp
tion web est de pouvoir naviguer en mework est conseillée, sinon requise, pour
mettant à jour uniquement les données chan- apprécier la rapidité de mise en oeuvre du Remplacez /web/bin par le chemin vers le
geantes. A l’opposé, une application classique composant jQuery ainsi que sa facilité d’uti- binaire zf.sh (linux, mac) ou zf.bat (win-
recharge une page complète à chaque fois que lisation. dows) et /web/myapp par l’emplacement dans
l’on clique sur un lien. Le lien hypertexte clas-
sique est remplacé par un lien javascript qui
s’occupe d’aller chercher l’information et de
l’afficher au bon endroit dans la page, sans re-
charger celle-ci. Il en découle un gain en rapi-
dité, une économie de bande passante et une
impression de fluidité.
Dans cet article, nous allons mettre en pla-
ce un album de photos utilisant AJAX. Nous Figure 1. Installation rapide d’une architecture Zend Framework opérationnelle
souhaitons qu’en cliquant sur le lien d’une
photo, cette dernière soit mise à jour sans re-
charger la page. Ce système permet de rendre
l’affichage des photos plus rapide (car il y a
moins de données à charger) et plus fluide
(car la page n’est pas rechargée).
Prérequis
Pour que le code source l'article fonctionne,
vous avez besoin de PHP 5.1.x ou plus (PHP
5.2.x conseillé) installé sur un serveur HTTP,
ainsi que les sources complètes de Zend Fra- Figure 2. Page d’accueil vide du contrôleur photo
20 4/2010
AJAX avec JQuery et Zend Framework
www.phpsolmag.org 21
Dossier
L’action PhotoController::
Particularité de Zend Layout indexAction()
Cette action va afficher la page de l’album,
Dans l’exemple de l’article, nous nous contentons d’une implémentation minimale qui n’utilise
qui contient un titre, des liens pour chaque
pas Zend_Layout. En revanche, il est parfaitement possible de gérer jQuery avec ce composant.
Il est en particulier judicieux d’intégrer jQuery au layout, entre les balises <head> et </head>, en photo et un bloc destiné à l’affichage des pho-
ajoutant cette ligne : tos. Les seules données à traiter sont la liste
des images.
<?php echo $this->jQuery(); ?> Le Listing 2 propose une implémentation de
cette action. Nous utilisons la fonction glob()
Tel que mentionné dans la section La vue index.phtml, cette ligne doit normalement être pla-
cée à la fin du template de vue afin d’être opérationnelle. Mais dans ce cas, le layout est calculé pour récupérer la liste des fichiers puis créons
après l’ensemble des vues, donc son emplacement dans le header du fichier HTML est possible. un tableau $photos avec des données arran-
gées pour simplifier les traitements de la vue.
C’est cette variable qui est passée à la vue pour
afficher les liens vers les photos disponibles.
La vue index.phtml
Cette vue va contenir le code HTML d’une
page complète, à commencer par la ba-
lise <html>. Dans la section <head>, nous
pouvons mettre un titre et les aides de vue
permettant de générer les données préa-
lablement chargées dans la vue courante
($this->headMeta()).
Dans la section <body>, on peut mettre un
titre, puis un premier bloc <div> contenant
la liste des liens destinés à accéder aux pho-
tos. C’est ici que pour chaque image nous uti-
lisons l’aide de vue $this->ajaxLink() qui
génére un lien AJAX. Le prototype de cette
Figure 3. Scénario classique d’une application AJAX méthode est le suivant :
$this->ajaxLink($label,$url,$options=null,
$params=null);
22 4/2010
AJAX avec JQuery et Zend Framework
www.phpsolmag.org 23
Pratique
CLI :
PHP en ligne de commande
PHP n’est pas qu’un langage de script orienté web.
Il peut s’utiliser en ligne de commande, ce qui
permet de l’utiliser comme un langage de script
classique.
P
HP est habituellement utilisé pour la les stoppe après un certain temps d’exécution php similaire à celui du listing 1 dans c:\cli.
création de sites ou de services web, (30 secondes par défaut). Faites donc très at- Ensuite, ouvrez la console Windows :
mais CLI (Command-Line Interface tention aux boucles infinies qui utiliseraient démarrer → exécuter → taper cmd → ok pour Win-
qui veut dire interface en ligne de commande votre processeur de façon excessive. dows XP et clic droit dans la barre des tâches =>
en français) permet d’utiliser PHP en ligne propriétés => Menu démarrer=> personnaliser
de commande dans la console d’un système Installation et cocher la case «Commande exécuter» pour Win-
d’exploitation. PHP CLI a été publié en ver- Pour pouvoir utiliser PHP CLI, vous devez dows Vista et Windows 7. Vous devriez alors
sion expérimentale avec PHP 4.2.0. Depuis, dans un premier temps installer PHP . Ici, je voir apparaître une fenêtre console similaire
CLI est un outil sûr et très utilisé pour créer vous propose une installation simple, il suffit à celle présente sur la Figure 2 (c:\document
des scripts shell (script système). Il est, notam- de télécharger PHP et ensuite d’utiliser son and setting\rafflin jérémy est le répertoire par
ment, très pratique pour automatiser ses sau- exécutable (vous verrez comment, un peu défaut dans lequel s’ouvre la console, ici il s’agit
vegardes de bases de données, interagir avec plus tard dans l’article). de mon répertoire personnel) .
une aplication web sans utiliser de naviga-
teur et bien d’autres choses. En couplant CLI
à une méthode d’automatisation, vous pour-
rez gagner un temps considérable. Toutes les
possibilités s’offrent alors à vous, vous pouvez
tester si un serveur est disponible automati-
quement, archiver les messages d’un forum
quotidiennement ou encore archiver vos dif-
férentes versions de scripts afin de pouvoir
éventuellement les restaurer.
Au cours de cet article, nous verrons com-
ment installer PHP CLI sous Windows XP
et Linux (l’installation sous les différentes
distributions est quasiment identique). En-
suite, nous utiliserons un exemple simple,
qui sera detaillé dans la suite de l’article, pour
voir les différentes façons d’utiliser CLI. Evi- Figure 1. Téléchargement du Windows binaries
24 4/2010
PHP CLI
senter ici car cela serait trop long). Si vous Listing 4. Contenu du fichier add_livre.php
utilisez un environnement graphique, l’ins-
tallation est similaire à celle sous Windows. #!/cli/php
<?php
Rendez-vous sur la page http://www.php. //on vérifie qu'il y a bien le nombre d'arguments attendus
net/downloads.php et téléchargez la source if($argc != 4) //si le nombre d'arguments est différent de 4
PHP5.x.x (tar.gz) ou PHP5.x.x (tar.bz2) sui- {
echo "Erreur, vous devez fournir au moins 3 arguments au script.\n";
vant vos outils de décompression (prenez la }
dernière version stable, à l’heure de la rédac- else //s'il y a le bon nombre d'arguments
{
tion de cet article il s’agit de la 5.3.1). La Fi- $titre = $argv[1];//on récupère le titre
gure 3 est une capture d’écran de la page en $auteur = $argv[2];//on récupère l'auteur
question. $public=$argv[3];//on récupère le public concerné
$donnees = array($titre,$auteur,$public);/*on les met dans un tableau
Une fois l’archive téléchargée, décompres- pour l'écrire dans le fichier csv*/
sez-la dans le répertoire de votre choix. Pour /*
plus de simplicité, j’ai décompressé l’archive *On ouvre le fichier afin de lire son contenu et ensuite pouvoir le
réinsérer
dans /cli (où CLI est un répertoire créé à la ra- */
cine du disque). Vous obtiendrez alors un dos- if($fichier = @fopen('livre.csv','r'))//on ouvre le fichier en lecture
sier php-5.3.1. Changez son nom en php, ainsi {
$info=array();
si vous changez de version, vous n’aurez pas while(($data=fgetcsv($fichier)) != false)
à modifier tous vos scripts. Votre installation {
est maintenant terminée. Afin de vérifier que $info[]=$data;
}
votre installation fonctionne correctement, fclose($fichier);
créez un fichier test.php similaire à celui du }
Listing 1 dans le répertoire /cli/php-5.3.1. if($fichier = @fopen('livre.csv','w'))
Ouvrez désormais un terminal : Application {
→ Outils système → Terminal (cette manipula- foreach($info as $ligne)//on réinsère les données qui étaient déja
présentes dans le fichier
tion peut être différente suivant votre distri- {
bution). Un terminal similaire à celui présent fputcsv($fichier, $ligne);
sur la figure 4 doit alors s’ouvrir. Exécutez }
fputcsv($fichier, $donnees);//on insère les données qui sont passées
la commande cd /cli/php-5.3.1 afin d’avoir le en arguments au script
bon répertoire courant, puis exécutez votre echo "Vous venez d'ajouter : \n".$titre.' | '.$auteur.' | '.$public."\n";
fichier test.php avec la commande php test. }
}
php. Vous devriez voir hello world apparaître ?>
à l’écran. Si ce n’est pas le cas, recommencez
le processus en vous assurant que vous suivez
bien les étapes.
www.phpsolmag.org 25
Pratique
26 4/2010
PHP CLI
www.phpsolmag.org 27
Pratique
28 4/2010
Cookies
Manipuler
les cookies avec PHP
Les cookies sont utilisés par un grand nombre d’applications
et de sites web pour stocker les préférences d’un utilisateur,
pour assurer un suivi de session ou pour pister l’utilisateur.
Dans cet article vous étudierez la transmission et la
manipulation de cookies HTTP avec PHP.
se. Les cookies qui stockent les préférences
Cet article explique : Ce qu’il faut savoir : d’un internaute sont généralement persis-
• Ce que sont les cookies. • Vous devez connaître les bases du langage tants, c’est-à-dire qu’ils ne sont pas effacés
• Comment les cookies sont transmis dans le PHP. lorsque l’utilisateur ferme son navigateur
protocole HTTP. ou éteint son ordinateur. Le cookie sera
• Comment envoyer et recevoir des cookies transmis lors de toutes les connexions futu-
avec PHP. res vers le site web, et ce jusqu’à ce qu’il soit
détruit (date d’expiration atteinte ou sup-
pression manuelle du cookie par l’utilisa-
le navigateur transmette une information teur). Pendant toute la durée de validité du
dans la requête HTTP. Ceci peut être réali- cookie, l’utilisateur obtiendra donc directe-
Niveau de difficulté sé par divers procédés : placer un paramètre ment les pages anglaises du site. La Figure 1
dans l’URL, transmettre l’information par le montre un exemple de cookie de langue af-
biais d’un formulaire HTML, ou en utilisant fiché dans le gestionnaire de cookies de Fire-
un cookie. La dernière solution est la plus fox. Le cookie a été placé par le site web fic-
L
e suivi de session dans le cadre d’un simple à mettre en place, la plus efficace et la tif monSiteWeb.fr, il est valide jusqu’au 1er
panier de commande, la naviga- plus sûre. janvier 2011.
tion dans une application web avec Vous allez dans un premier temps étudier le Dans le cadre d’un panier de comman-
authentification, l’affichage personnalisé principe général des cookies et de leur trans- de, le cookie est un jeton de session. Lors-
d’une page web (langue, style) et le pistage mission entre un client et un serveur HTTP, que l’utilisateur débute sa navigation, le
d’un internaute, ne peuvent fonctionner que vous verrez ensuite comment créer un cookie serveur génère un identifiant unique aléa-
si le serveur reconnaît l’internaute, ou reçoit avec PHP et comment l’utiliser dans une ap- toire et l’envoie au navigateur, par exemple
les préférences de l’internaute lorsque celui- plication web. sessid=f7db4156ea79df. Le contenu du
ci lui demande une URL. panier de commande est stocké sur le dis-
Les clients (navigateurs) et les serveurs web Principe que dur du serveur, dans une base de don-
communiquent par le biais du protocole de Les cookies permettent à une application nées ou dans un fichier de session. Lors
transport HTTP (HyperText Transfer Pro- web d’enregistrer des informations de petite de toute demande, le navigateur retourne
tocol). Aucune information n’est conservée taille sur le disque dur de l’internaute. Lors l’identifiant de session, ceci permet au ser-
entre deux connexions. Lorsque le serveur des connexions suivantes du client à l’ap- veur de le reconnaître et de mettre à jour
reçoit une demande de ressource, les seules plication, ces informations sont transmises le bon panier de commande. Généralement
informations dont il dispose sont l’adresse IP automatiquement par son navigateur. Le coo- ces cookies ne sont pas persistants, ils sont
qui a émis la requête, et la requête HTTP el- kie est une chaîne de caractères composée de détruits lorsque l’internaute quitte le navi-
le-même (ressource demandée, informations deux parties : un nom et une valeur, séparés gateur.
sur le navigateur, et éventuellement données par le caractère égal. Les cookies sont parfois utilisés pour pis-
et méta-informations sur ces données). L’a- Par exemple, si un internaute choisit la ter un internaute. Le suivi peut être réalisé
dresse IP ne permet pas d’identifier un uti- version anglaise d’un site bilingue, le ser- sur un domaine ou un site unique afin de
lisateur unique car plusieurs clients peuvent veur lui envoie la page anglaise et un cookie connaître ses habitudes de navigation, ou les
partager une même adresse IP (proxy, trans- langue=en pour stocker cette préférence de produits du site qui l’intéressent. Lors de la
lation d’adresse). De plus un ordinateur peut langue. Lorsque l’internaute demande de première visite de l’internaute, le serveur
changer d’adresse IP entre deux visites à un nouvelles pages au serveur, il transmet en génère un identifiant unique. A chaque fois
site web, voire même au cours d’une même même temps automatiquement le cookie que l’internaute demande une page web, il
navigation (DHCP). Le seul moyen pour un indiquant la langue souhaitée, le serveur le retourne le cookie. Le serveur stocke dans un
serveur de reconnaître un internaute est que reçoit et retourne la page en version anglai- fichier de log, ou dans une base de données,
www.phpsolmag.org 29
Pratique
30 4/2010
Cookies
www.phpsolmag.org 31
Pratique
à partir de la date courante. L’internaute quota est dépassé le cookie le moins récent Manipulation de cookies
n’est donc pas obligé de redéfinir ses pré- est écrasé. Une application web doit donc depuis PHP
férences de navigation, sauf s’il a effacé ses limiter le nombre et la taille des cookies Cette partie explique comment envoyer un
cookies, ou si la date de sa dernière visite est envoyés. cookie depuis un script PHP à un navigateur,
trop ancienne (la date d’expiration du coo- Les navigateurs proposent des gestionnai- comment lire un cookie renvoyé par le naviga-
kie est dépassée). res de cookies permettant d’afficher et sup- teur et comment modifier ou supprimer un
Un cookie est valide pour un domaine et primer les cookies stockés sur le disque. La cookie déjà existant.
un chemin. Ceci permet de limiter l’envoi Figure 1 montre le cookie de langue dans le
du cookie aux serveurs du domaine, et de gestionnaire de cookies de Firefox. Cet exem- Envoyer un cookie depuis PHP
restreindre sa visibilité à des parties de l’ar- ple correspond au cookie langue envoyé par La fonction PHP setcookie permet d’en-
borescence web du serveur. Le nom de do- l’exemple de la Figure 3. voyer un cookie au navigateur. Elle crée
maine par défaut est celui du serveur qui Lorsque le cookie envoyé par le serveur l’en-tête HTTP Set-Cookie à partir des pa-
génère le cookie, des noms de sous-domai- existe déjà dans le navigateur (même nom, ramètres qu’elle reçoit, en se basant sur la
nes peuvent cependant être précisés. Dans même domaine et même chemin), la nou- spécification des cookies de Netscape. Elle
l’exemple de la Figure 3, le nom de domai- velle valeur remplace la valeur stockée sur accepte sept arguments et retourne un boo-
ne pour le cookie n’est pas précisé, le do- le disque. Si le cookie reçu a une date d’ex- léen (faux en cas d’échec). Le nom et la va-
maine est donc celui par défaut. Le chemin piration dépassée (attribut expires pour leur du cookie sont donnés respectivement
est utilisé pour indiquer le sous-ensemble Netscape ou Max-Age pour les RFC), alors le en premier et second argument. Les argu-
d’URL du domaine pour lequel le cookie cookie qui était stocké sur le disque doit être ments suivants fixent la durée de validité, le
est valide et sera envoyé. Le chemin "/" est effacé par le navigateur. L’envoi d’un cookie chemin et le domaine du cookie. Les deux
le plus général (racine du serveur web), "/ dont la durée de validité est nulle, ou la date derniers arguments sont des booléens dédiés
int" enverra le cookie aussi bien aux URL de validité est dépassée, permet aux applica- à la sécurité :
commençant par "/internet" qu’à celles tions web de forcer la suppression d’un coo-
commençant par "/intranet". Par défaut, kie sur le disque de l’internaute, lorsque ce- setcookie("nom", "valeur", expiration,
c’est le chemin du document qui a envoyé lui-ci se déconnecte. Cette mesure évite que "chemin", "domaine", secure, httponly);
le cookie qui est utilisé. Dans l’exemple de la session reste valide si le navigateur n’est
la Figure 3, le chemin donné est la racine du pas quitté. La date d’expiration doit être donnée sous
serveur, cela signifie que le cookie est valide la forme d’un timestamp Unix. C’est-à-dire
pour l’ensemble des pages web situées sur Envoi par le client que c’est un nombre entier représentant
ce serveur. A chaque fois que le navigateur envoie une le nombre de secondes écoulées depuis le
L’attribut secure indique au navigateur requête HTTP au serveur, il vérifie si des 1er janvier 1970, jusqu’à la date d’expi-
qu’il ne doit transmettre le cookie que si cookies sont stockés pour le domaine et le ration souhaitée. Pour stocker un cookie
la communication est sécurisée (HTTPS). chemin de la ressource souhaitée. Si ces coo- qui restera valide une heure il suffit donc
Ceci est important lors de la transmission kies ne sont pas périmés et qu’ils peuvent de passer en argument time()+3600. Pour
d’un cookie de session, afin d’éviter l’inter- être envoyés en clair, le navigateur ajoute le obtenir un cookie de session, supprimé
ception par un tiers. Par défaut, le cookie champ d’en-tête Cookie dans l’en-tête de la lorsque le navigateur est quitté, il suffit
est envoyé quel que soit le type de commu- requête HTTP. Les cookies stockés dans le de passer la valeur 0. Le code ci-après crée
nication. navigateur ne peuvent être envoyés qu’au un cookie langue persistant qui est valide
serveur qui les a créés. Le cookie langue, une semaine (7 jours x 24 heures x 3600
Enregistrement du cookie par le client dans l’exemple pris dans cet article (Figure secondes) :
Lorsque le navigateur reçoit la réponse HTTP, 4), a été généré par le serveur fictif monSi-
s’il supporte les cookies et que la fonctionnali- teWeb.fr, il sera envoyé par le navigateur lors setcookie("langue", "en", time()+604800);
té est activée, il analyse le champ Set-Cookie. de chaque connexion vers le serveur. Il ne
Il extrait le nom et la valeur du cookie, ain- sera jamais envoyé à un autre domaine que Si le script est exécuté le samedi 24 avril 2010
si que ses attributs (durée de vie, chemin, celui auquel appartient le serveur fictif qui à 20h en France, le cookie sera valide jusqu’au
domaine, ...). Lorsque des attributs sont ab- l’a créé. samedi 1er mai 2010, 18h GMT. La fonction
sents, le navigateur prend les valeurs définies Le champ d’en-tête HTTP comporte un setcookie génère la ligne d’en-tête HTTP
par défaut (expiration à la fin de la session, …). ou plusieurs cookies sous la forme de pai- correspondante :
Pour des raisons de sécurité, et pour assurer le res nom=valeur, séparées par le caractère
respect de la vie privée, le navigateur doit reje- point-virgule. Dans l’exemple ci-après, le Set-Cookie:langue=en; expires=Sat,
ter tout cookie dont le chemin ne correspond navigateur demande la page index.php au 1-May-2010 18:00:03 GMT
pas à celui de l’URL demandée dans la requê- serveur monSiteWeb.fr et envoie les deux
te HTTP. Une fois la validité de la demande cookies de préférences, le style silver et la Pour restreindre le vol des cookies de ses-
vérifiée, le cookie est stocké sur le disque dur langue en : sion, il est conseillé d’une part d’interdi-
du client. re l’envoi de cookie par le navigateur si la
Les spécifications de Netscape et les GET http://monSiteWeb.fr/index.php connexion n’est pas cryptée (vol par inter-
deux versions des RFC précisent qu’un HTTP/1.0 ception), et d’autre part d’interdire la ma-
navigateur doit permettre de stocker au Cookie:style=silver; langue=en nipulation des cookies par les langages de
moins trois cents cookies, dont vingt coo- script dans le navigateur (vol par une atta-
kies par serveur ou domaine. La place mé- Maintenant que vous connaissez les princi- que XSS). Ceci est réalisé en donnant la va-
moire réservée pour chaque cookie doit pes de base de la communication des cookies leur true aux deux derniers paramètres de
être de 4 Ko minimum (ceci permet de dans le protocole HTTP, vous allez apprendre la fonction. Le dernier argument n’est pré-
stocker 4096 caractères ASCII). Quand le à les manipuler depuis un script PHP. sent que depuis la version 5.2 de PHP. Il a
32 4/2010
Cookies
style = silver
Sur Internet langue = en
• http://php.net/manual/fr/features.cookies.php – Manuel des cookies sur le site officiel de Modifier la valeur d’un cookie
PHP, Pour modifier la valeur d’un cookie stocké
• http://curl.haxx.se/rfc/cookie_spec.html – Spécification d’origine des cookies de Netscape sur le disque du client, il suffit d’en envoyer
(une copie du document est disponible sur le site officiel de CURL), un de même nom, de même chemin et de
• http://www.rfc-editor.org/rfc/rfc2109.txt – RFC 2109 HTTP State Management Mechanism même domaine, avec la nouvelle valeur. Par
(décrit les en-têtes HTTP de transmission de cookies Set-Cookie et Cookie), exemple, le code ci-après remplace la valeur
• ftp://ftp.rfc-editor.org/in-notes/rfc2965.txt – RFC 2965 (décrit les en-têtes HTTP Set-Coo- du cookie style, par la valeur green :
kie2, Cookie2 et Cookie, en remplacement du RFC2109).
setcookie('style', 'green');
pour effet d’ajouter le paramètre HTTPOnly Le script test.php ci-après, situé dans le réper- Effacer un cookie
dans la ligne Set-Cookie. Ce dernier n’étant toire visite du site web fictif monSiteWeb.fr Pour effacer un cookie stocké par le client, il
pas standard il n’est pas implémenté dans envoie deux cookies au client lorsque celui-ci suffit d’en renvoyer un de même nom, de mê-
tous les navigateurs. demande l’URL http://monSiteWeb.fr/visite/ me chemin et de même domaine, dont la date
Seul le premier argument de la fonction test.php : d’expiration est inférieure à la date courante.
est obligatoire (nom du cookie). Par défaut Par exemple, si la fonction setcookie reçoit
le cookie est non persistant, les booléens de <?php // test.php comme troisième argument time()-3600, le
sécurité ont la valeur false, le chemin est ce- setcookie("langue", "en", time()+604800, cookie envoyé au client a une date d’expira-
lui du répertoire du script qui est exécuté, le '/'); tion située une heure dans le passé. L’instruc-
domaine est celui du serveur. Si vous ne sou- setcookie("style", "silver", 0); tion ci-après indique qu’il faut effacer le coo-
haitez pas définir de valeur pour un des ar- ?> kie dont le nom est sessid :
guments de type chaîne de caractères, il suf-
fit de lui affecter une chaîne vide. Le code Le premier cookie est une préférence de lan- setcookie('sessid', ", time()-3600);
ci-après crée un cookie de session non per- gue persistante, il sera valide pendant une se-
sistant, qui ne sera transmis que par HTTPS maine. Ce cookie sera transmis à chaque fois Conclusion
et dont la manipulation en JavaScript sera que le navigateur enverra des requêtes au site Vous savez à présent placer un ou plusieurs
interdite dans les navigateurs reconnaissant monSiteWeb.fr, car la validité est sur la racine cookies dans le navigateur d’un internaute,
l’attribut httponly : du site web (symbole slash). Le second coo- et récupérer les valeurs des cookies dans un
kie est une préférence de style non persistan- script PHP. Ces connaissances vous permet-
setcookie("sessid", "f7db4156ea79df", te. Comme le chemin n’est pas précisé, c’est tent d’ores et déjà de stocker des préférences
0, ", ", true, true); celui du script qui a placé le cookie qui sera utilisateur afin de personnaliser l’affichage
utilisé, c’est-à-dire /visite/. Le cookie sera (style, langue, ...).
La fonction génère l’en-tête HTTP suivant : donc envoyé uniquement aux scripts situés Les cookies combinés aux sessions permet-
dans le même répertoire que le script test.php tent de réaliser des paniers de commandes,
Set-Cookie: sessid=f7db4156ea79df; ou dans un des sous-répertoires. ou de gérer une navigation dans un site né-
secure; httponly Le script affiche_cookies.php affiche tous cessitant une authentification et comportant
les cookies contenus dans le tableau $_ plusieurs niveaux de privilèges (wiki, CMS,
Les cookies étant envoyés dans l’en-tête COOKIE : forum, ...). Dans les prochains numéros de
HTTP, la fonction doit toujours être appe- PHP Solutions, vous apprendrez le principe
lée avant d’écrire le corps (c’est-à-dire avant <?php // affiche_cookies.php et la manipulation des sessions, vous verrez
toute instruction echo, print, printf ou foreach ($_COOKIE as $nom=>$valeur){ quels sont les problèmes de sécurité les plus
toute balise HTML). Une fois le début du echo "$nom = $valeur<br>"; courants rencontrés dans ce type d’applica-
corps envoyé il est impossible de placer un } tion, et comment les sécuriser.
cookie, PHP affichera dans ce cas un messa- ?>
ge d’alerte :
Si le script affiche_cookies.php est placé à
Warning: Cannot modify header information - la racine du site web, lorsque le navigateur
headers already sent. envoie une requête pour obtenir la ressour-
ce http://monSiteWeb.fr/affiche_cookies.php, CÉCILE ODERO,
Récupérer un cookie envoyé seul le cookie de langue est envoyé car il est MAGALI CONTENSIN
par le client valide pour tout le site web. Le script affiche Cécile Odero est spécialisée dans la conception
Les cookies envoyés par le navigateur sont donc : et le développement d’applications web en PHP.
stockés par PHP dans le tableau associatif su- Elle est développeur web freelance.
per-global $_COOKIE. Les clés de ce tableau langue = en Contact : [email protected]
sont les noms des cookies, les valeurs sont Magali Contensin, auteur du livre Bases de don-
celles associées à chaque cookie. Par exem- Si le script affiche_cookies.php est placé dans nées et Internet avec PHP et MySQL, est chef de
ple, le code suivant affiche la valeur du coo- le répertoire visite, lorsque le navigateur en- projet en développement d’applications au CNRS.
kie langue : voie la requête pour obtenir la ressource Elle enseigne depuis plus de dix ans le développe-
http://monSiteWeb.fr/visite/affiche_cookies. ment d’applications web à l’Université.
echo $_COOKIE['langue']; php, les deux cookies sont envoyés : Contact : http://magali.contensin.online.fr
www.phpsolmag.org 33
Pratique
Android
ou gPhone
Vous voulez changer de téléphone en pensant
à un smartphone ? Oui mais lequel ? Vous avez entendu
parler d'Android, de gPhone et vous aimeriez creuser
le sujet puisque vous connaissez déjà plus ou moins
d'autres noms. Penchons nous donc sur Android.
• le fait que la communauté Android soit
Cet article explique : Ce qu’il faut savoir : en retard par rapport aux communautés
• Ce qu'est Android. • Ce qu'on espère d'un smartphone. Linux parce que les deux projets Linux
• Comment gérer au mieux son téléphone et Android sont développés de manière
Android. totalement séparée.
S
i vous vous penchez sur les smart- sons que nous allons vite découvrir. conséquence mais c’est une autre histoire.
phones (ou ordiphone), vous aurez
le choix entre plusieurs modèles. Par Présentation d’Android
modèle entendez plutôt système d’exploi- Initialement, c’est la startup Android qui a
tation que marque de fabricant. Car c’est le développé ce système d’exploitation. Le choix
système d’exploitation qui, comme pour les du terme Android est basé sur le mot androï-
ordinateurs traditionnels, permettent à ces de représentant un robot construit sur le mo-
téléphones intelligents, outre la téléphonie dèle humain. En août 2005, la société Google
évidemment, de gérer agendas et calendriers, a racheté la startup Android. Les rumeurs qui
d’aller naviguer sur internet, de consulter ses ont suivicette acquisition ont transformé le
courriels, de faire de la messagerie instanta- terme Android en gPhone. De fait, Android
née, etc.. Plusieurs systèmes d’exploitation est le nom réel du système d’exploitation pour
pour smartphones sont disponibles de nos smartphone tandis que gPhone en est devenu
le surnom désormais courant des téléphones
Android, qu’on nomme aussi Androphone.
Origine
Android est basé sur le noyau Linux. C’est
un système ouvert et Open Source. Cepen-
dant, d’après Matthew Porter, architecte logi-
ciel en chef chez la société Embedded Alley,
ce n’est pas un système Linux dans le sens
strict du terme. Sans s’appesantir sur les dé-
tails techniques, Matthew Porter dénonce :
34 4/2010
Android
www.phpsolmag.org 35
Pratique
Android Market
Si l’une des applications natives ne vous
convient guère ou si vous estimez que l’un
de vos besoins applicatifs n’est pas four-
ni, vous pouvez toujours vous diriger vers
l’Android Market. Cette plate-forme met
à disposition une liste déjà fort impression-
nante d’applications pour Android (entre
16000 et 20000 dont 37,8% payantes, de-
puis décembre 2009) . Passez par le widget
nommé Market (une icône représentant un
sac blanc avec le logo vert Android) pour vi-
siter Android Market. Chaque application
est dotée de sa propre fiche descriptive avec
une notation de popularité, des commen-
taires et un bouton Installer. Je vous invite
fortement à cliquer sur le lien Lire tous les
Figure 3. Le Motorola Dext (Cliq) avec le clavier ouvert commentaires. Une fois votre choix effectué,
le système vous indique les permissions
systèmes requises (internet, GPS …) ; vous
pouvez encore annuler le téléchargement
si ces permissions vous paraissent exagé-
rées. Une fois les permissions systèmes va-
lidées par vos soins, le système se charge de
télécharger et d’installer l’application et le
widget. A vous de patienter ! Toutes ces ap-
plications sont répertoriées par thèmes et
sous-thèmes :
36 4/2010
Android
Gestion de la batterie
Pour faire durer la batterie, vous pouvez ré- Figure 5. Le Nexus One, fabriqué par HTC mais Figure 6. Le Samsung Galaxy Spica
gler les paramètres de l’Androphone : vendu directement par Google
www.phpsolmag.org 37
Pratique
38 4/2010
Android
Personnalisation
Comme pour GNU/Linux, Android per- Sur Internet
met de personnaliser son système. J’évo-
que davantage la personnalisation du bu- • http://fr.wikipedia.org/wiki/Smartphone – Les smartphones,
reau que celle des sonneries. Et plus que le • http://fr.wikipedia.org/wiki/Android – Android,
simple choix d’un fond d’écran, c’est l’en- • www.openhandsetalliance.com – Open Handset Alliance,
vironnement de bureau lui même qui est • www.android.com – Site officiel,
possible via diverses applications comme • http://developer.android.com/ – Android Developers,
• http://android-france.fr/2009/11/27/android-est-il-un-systeme-linux/ – Linux ou pas,
Open Home, PandaHome, aHome … Soyez
• http://market.android.com – Android Market,
cependant vigilant au fait que certaines de
• www.frandroid.com – FrAndroid : la référence francophone,
ces applications pourraient ralentir votre
• http://android-france.fr – Android France,
machine voire même vider rapidement la • www.planete-android.com – Planète Android,
batterie. • www.pointgphone.com – Point Gphone,
• http://gphone.news.free.fr – Android Gphone News,
Conclusion • www.sosandroid.fr – SOS Android,
Investir dans Android permet à Google de • www.android-software.fr – Android Software,
renforcer ses positions sur la maîtrise des • http://fr.androidzoom.com – AndroidZoom,
services liés à internet puisqu’un smartpho- • http://fr.androlib.com – AndroLib,
ne peut par nature aller sur le web. A la li- • www.widgetvalley.com – Widget Valley.
mite, ce n’est pas là notre affaire en tant que
consommateur de téléphonie. Ce qui nous
intéresse avant tout est l’aspect pratique du (Open Source) alors que les deux autres prochaine mouture d’Android, c’est à dire
smartphone, ses possibilités et sa philoso- sont sous licence propriétaire avec un code Android Froyo 3.0..
phie. L’aspect pratique est une affaire de source fermé. Vous pouvez personnaliser Pour terminer, sachez que le concept du
goût mais gageons qu’il ne peut que s’amé- sans restriction les bureaux d’un Andro- mutitouch étant breveté par Apple, et bien
liorer puisque Google a réussi à fédérer phone et d’un Windows Phone alors qu’il que le matériel Androphone possède désor-
dans l’Open Handset Alliance des construc- faudra jailbreaker, c’est à dire casser la pro- mais nativement cette faculté dans les nou-
teurs. Les possibilités devraient également tection (à vos risques et périls), pour parve- velles versions d’Android, cette fonction de-
s’étendre puisque le catalogue logiciel gros- nir au même but sur un iPhone. Par contre, meure encore inactivée par défaut dans un
sit somme toute assez vite et est déjà assez beaucoup de constructeurs assemblent de souci juridique. Souhaitons que l’affaire se
conséquent. La philosophie Android : c’est multiples modèles de smartphones sous débloque rapidement d’autant que certains
là le point noir, du moins pour certains : du Android et Windows Mobile / Windows développeurs parviennent déjà à implémen-
GNU/Linux partiel un peu contraignant Phone tandis que l’iPhone n’est proposé ter le multitouch.
et l’appétit de Google qui effraie. Pour ceux que par un seul constructeur (Apple). Au Quant aux androphones, inutile d’en dres-
qui dénoncent la voracité de Google, le sa- niveau de la richesse des applications dis- ser ici la liste. Sachez simplement que les fa-
lut n’est point non plus du côté d’Apple et ponibles, iPhone prend la tête du classe- bricants qui misent sur Android sont (par
de Microsoft. Mais Android, c’est aussi et ment, suivi par Android et Windows Mo- ordre alphabétique) HTC, LG, Motorola,
déjà une formidable communauté (dont 7 bile / Windows Phone arrive en troisième Samsumg. De plus, la firme Google a fait fa-
sites francophones). position. Toutes les applications proposées briquer par HTC son fameux gPhone et le
Sans verser dans le sectarisme, faisons dans l’App Store doivent respecter les obli- commercialise directement sous le nom de
une brève comparaison entre Android gations dictées par Apple (Certains refus de Nexus One. Selon ce même schéma, Google
et d’autres systèmes d’exploitation pour distribution dans l’App Store font d’ailleurs devrait à terme vendre le Nexus Two fabriqué
smartphone tels que iPhone et Windows rager, tel le refus d’Opera Mini entrant en par Motorola.
Mobile / Windows Phone (les plus connus). concurrence avec Safari.). Ces restrictions
Android est sous licence libre (licences Apa- pouvant être considérées par certains com-
che 2.0 et GPL2) avec code source ouvert me une forme de censure n’existent pas
sur Android et Windows Mobile / Win-
dows Phone. Mais si vous désirez impéra-
tivement la fonction multitouch (exemple :
agrandir une page en utilisant deux doigts
simultanément), ce sera obligatoirement
l’iPhone.
Du côté des mises à jour du système An-
droid, d’après le blog américain Engadget, THIERRY BOREL
Google souhaiterait assouplir les contrain- Passionné d’informatique (et d’histoire) mais
tes dues aux versions du système. Ainsi, entièrement autodidacte, il est devenu à for-
pour ne plus être tributaire d’une version ce de patience et persévérance l’un des modé-
minimale précise du système Android, rateurs du site d’entraide informatique http://
l’idée est de désolidariser les applications www.commentcamarche.net. Touché défini-
du système. Dans la même idée de sou- tivement par la grâce du logiciel libre depuis
plesse, l’Android Market devrait proposer près de deux ans, il expérimente tout ce qui
à terme et directement les mises à jours du se rapporte à GNU/Linux de façon à aider les
Figure 8. La mascotte du projet Android système Android, et cela à compter de la autres.
www.phpsolmag.org 39
Fiche technique
MySQLND :
une économie de ressources
L’optimisation et la gestion des ressources sont des
points importants dans le milieu du développement
et ce sont souvent des points mal évalués du coté
des connexions vers le serveur.
Maintenance
Comme l’ensemble des langages informatiques,
c’est-à-dire que lors des différentes évolutions PHP évolue différemment en fonction de :
de PHP, ce driver sera automatiquement mis
Niveau de difficulté à jour. • L'apparition de nouvelles fonctionnalités.
Le gain du mode natif permet d’éviter une • Différents points de sécurités ou correctifs.
compilation supplémentaire causé par un
composant externe comme libmysql. Utiliser Le langage PHP ne dépend plus de la librai-
L
e langage PHP est souvent associé à la MySQLND va vous permettre d’obtenir de rie libmysql, c’est-à-dire qu’il n’est plus néces-
base de données MySQL et initiale- nombreux avantages en terme de : saire d’installer un composant externe pour
ment un nouveau driver devait voir parvenir à compiler PHP. C’est pourquoi la
le jour avec la sortie de PHP 6. Les choix et • Performances mémoires. maintenance a été facilitée. Comme l’article
les orientations ont modifié la date de sortie • Maintenance. spécifié un peu plus haut, la bibliothèque
de celui-ci. • Nouvelles fonctionnalités. MySQLND sera mise à jour en même temps
C'est avec la sortie de PHP 5.3 que l'évolu- que PHP et donc un gain de temps mais aussi
tion est apparue au niveau de la relation en- Les performances mémoires une préoccupation en moins.
tre PHP et MySQL. Il s'agit d'un nouveau dri- MySQLND a été réalisé pour s’intégrer et Bien entendu, si celui-ci est intégré, il se-
ver appelé MySQLND qui veut dire MySQL pour fonctionner avec PHP, et par consé- ra uniquement utilisé par PHP, ce qui per-
Native Driver. Ce nouveau driver va apporter quent elle passe par le gestionnaire de mémoi- met d’éviter avoir des risques d’erreurs ou de
énormément de changement et d’évolution, re du Zend Engine. Ainsi, vous obtenez une conflits lorsqu’une librairie est utilisée par
dont l’article vous montrera un aperçu des meilleure gestion de l’allocation de la mémoi- une autre application comme cela pouvait
nouvelles possibilités qui vous sont offertes. re et donc un gain en terme de cycles CPU. l’être avec libmysql.
Présentation
MySQLND est une bibliothèque dévelop-
pée par MySQL spécifiquement pour PHP,
par conséquent il ne s’agit pas d’un nouveau
connecteur et il n’a pas pour but de rempla-
cer les trois solutions qui existent : MySQL,
MySQLi ou PDO_mysql. Elle a le rôle de so-
cle commun, c’est-à-dire qu’elle ne sera pas vi-
sible directement par le développeur. Mais ce
point sera vu un peu plus loin.
Le driver MySQLND est une bibliothèque
réalisée en langage C et remplace l’ancienne
librairie libmysql. Ce driver est maintenant
intégré avec la version de PHP 5.3 en natif, Figure 1. Différences entre les librairies
40 4/2010
MySQLND
Schématiser
Le basculement de libmysql vers MySQLND, Listing 1. Connexion persistante
n’est pas visible pour les développeurs mais le <?php
comportement va être différent. Quand on
utilisait la librairie libmysql, le jeu de résultat $host="p:localhost";
$port=3306;
d’une requête était stocké en mémoire. À cha- $socket="/tmp/mysql.sock";
que boucle vous tapiez dans ce résultat pour $user="root";
créer de nouvelles variables. Elle faisait appel $password="password";
$dbname="test";
aux données sous la forme d’un tableau avec
l’aide d’un script PHP. $cnx = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('On ne peut pas se connecter au serveur de base de données' .
Avec MySQLND, c’est différent, les don- mysqli _ connect _ error());
nées ne sont plus appelés à chaque boucle car
vos variables PHP pointent directement vers $cnx = close;
une adresse mémoire de votre jeu de résultat ?>
MySQL à utiliser. Ce changement permet
d’éviter des doublons et va permettre d’éco- Listing 2. Statistiques sur le client
nomiser une partie de la mémoire.
<?php
En un mot avec libmysql comme exten- $cnx = mysqli _ connect("localhost","root","","mysql");
sion, l’appel mémoire était effectué une fois
echo "<pre>";
pour stoker les données par la librairie et une print _ r(mysqli _ get _ client _ stats());
fois par PHP. Avec MySQLND, elles ne sont echo "</pre>";
plus stockées qu’une seule fois comme vous
?>
pouvez le voir sur la Figure1 (Différences en-
tre les librairies). Ce graphique a été présenté Listing 3. Statistiques sur le cache du client
et réalisé par Andrey Hristov à la conférence
PHP Vikinger en juin 2007 <?php
$cnx = mysqli _ connect("localhost","root","","mysql");
Comme le montre ce dernier, vous pou-
vez voir le nombre de Ko consommés lorsque echo "<pre>";
print _ r(mysqli _ get _ cache _ stats());
vous utilisez des requêtes. La théorie montre echo "</pre>";
que cela va du simple au double, mais en pra-
tique ce sera différent car d’autres critères ?>
sont à prendre en compte comme des tests de
Listing 4. Statistiques sur la connexion
sécurité ou de validité qui peuvent être plus
ou moins long. <?php
$cnx = mysqli _ connect("localhost","root","","mysql");
L'ensemble de ces points sera détaillé dans les Listing 6. Test de connexion
lignes qui vont suivre car elles exploitent au
maximum cette nouvelle librairie. <?php
www.phpsolmag.org 41
Fiche technique
$sql="SELECT name, parent _ category _ id FROM help _ category "; Fonction sécurisée
$req=mysqli _ query($cnx,$sql);
Depuis que MySQLND existe et surtout se trou-
$row=mysqli _ fetch _ all($tmp); vant associé à PHP, il était nécessaire de pouvoir
proposer des connexions sécurisées. Mainte-
echo "<pre>";
print _ r ($row); nant c’est possible avec la fonction suivante :
echo "</pre>";
mysqli_ssl_net : établir une connexion sé-
mysqli _ free _ result($req);
mysqli _ close($cnx); curisée avec SSL.
?>
Cette fonction existe depuis la version de
PHP 5.3.2 et les extensions telles que ext/mys-
comme vous étiez obligé de le faire sous dif- Mysqli_get_client_stats ql, ext/mysqli, PDO_MySQL qui sont confi-
férentes manières dans les versions précé- La fonction mysqli_get_client_stats() gurées pour utiliser le pilote natif MySQL
dentes. Maintenant les fonctions disponibles permet de retourner des statistiques sur le peuvent tirer parti de ce protocole. Le prin-
sont : client dans un tableau associatif et se pro- cipe d’utilisation est montré dans le Listing 7
gramme comme le montre le Listing 2 statis- (connexion sécurisée).
• mysqli _ get _ client _ stats, tiques sur le client. Pour obtenir le résultat de
• mysqli _ get _ connection _ stats, l’image 2 statistiques sur le client. Système de cache de requête
• mysqli _ get _ cache _ stats. Le résultat obtenu est identique à la fonc- MySQLND propose une autre évolution
tion phpinfo() (Listing 5) dans la partie mys- pour afficher des requêtes et donc gagner du
Ces fonctions sont disponibles avec l’exten- qlnd. Seulement, elles sont spécifiques sur le temps machine. Un nouveau concept de ca-
sion MySQLi (ext/mysqli) et seulement pour client par processus et surtout un bon moyen che requête a été introduit du coté client. Il
MySQLND. Par ailleurs, quelque soit la fonc- pour optimiser vos scripts. Chaque ligne de s’agit de pouvoir stocker le résultat des requê-
tion utilisée, celle-ci retournera le même type résultat obtenue a une signification qui est tes dans une zone de tampon. Le jeu de résul-
de tableau. Le contenu de celle-ci se présente expliquée dans le Tableau 1 statistiques sur le tats obtenu, est enregistré et stocké du côté
sous la forme d’une clé et d’une valeur com- client. client, c’est-à-dire qu’après l’éxécution d’une
me ceci : requête, l’ensemble des résultats sont récu-
Mysqli_get_cache_stats pérés du serveur MySQL et mis en cache côté
• Nom de la statistique = clé. La fonction mysqli_get_cache_stats() re- client. L’avantage au niveau du résultat mis
• Donnée statistiques = valeur. tourne les statistiques sur le cache du client en tampon, autorise le serveur à libérer des
42 4/2010
MySQLND
bytes_received_rset_header_packet, packets_ Trafic entrant: à partir de MySQL pour PHP. Seulement utile pour le débogage CS
received_reset_header application du Protocole.
bytes_received_rset_field_meta_packet, packets_ Trafic entrant: à partir de MySQL pour PHP. Seulement utile pour le débogage CS
received_rset_field_meta application du Protocole.
bytes_received_rset_row_packet, packets_ Trafic entrant: à partir de MySQL pour PHP. Seulement utile pour le débogage CS
received_rset_row application du Protocole.
bytes_received_prepare_response_packet, Trafic entrant: à partir de MySQL pour PHP. Seulement utile pour le débogage CS
packets_received_prepare_response application du Protocole.
bytes_received_change_user_packet, packets_ Trafic entrant: à partir de MySQL pour PHP. Seulement utile pour le débogage CS
received_change_user application du Protocole.
packets_sent_command Trafic sortant: à partir de PHP pour MySQL. Seulement utile pour le débogage CS
application du Protocole.
Class: result set Information sur les jeux de résultat.
result_set_queries Mesure indirecte pour le nombre de requêtes PHP a envoyée à MySQL (Fonction SELECT,
SHOW)
non_result_set_queries mesure indirecte pour le nombre de requêtes PHP a envoyée à MySQL (fonction INSERT,
UPDATE, LOAD DATA, SHOW.)
no_index_used Nombre de requêtes qui ont généré un ensemble de résultats, mais ne pas utiliser un index
bad_index_used Nombre de requêtes qui ont généré un ensemble de résultats et ne pas utiliser un bon
index
slow_queries instructions SQL qui a pris plus de long_query_time secondes pour exécuter et exigeait au
moins min_examined_row_limit lignes qui doivent être examinés.
buffered_sets Nombre de résultat SQLite ensembles retourné par «normal» dans les requêtes
unbuffered_sets Nombre de résultat unbuffered ensembles retourné par «normal» dans les requêtes.
ps_buffered_sets Nombre de résultat SQLite corps restitués par les déclarations préparées.
ps_unbuffered_sets Nombre de résultat unbuffered corps restitués par les déclarations préparées.
flushed_normal_sets, flushed_ps_sets Nombre d’ensembles de résultats à partir de «normal» dans les requêtes et déclarations
établis avec des données non lus qui ont été écrites en silence pour vous.
ps_prepared_never_executed Nombre de déclarations préparées, mais jamais exécutée.
rows_fetched_from_server_normal, rows_fetched_ Nombre total de lignes du résultat définie avec succès récupéré depuis MySQL
from_server_ps
rows_buffered_from_client_normal, rows_ Nombre total de lignes correctement tamponné provenant d’une requête «normale» ou
buffered_from_client_ps une déclaration préparée
rows_fetched_from_client_normal_buffered, rows_ Nombre total de lignes lues par le client à partir d’un résultat SQLite
fetched_from_client_ps_buffered
rows_fetched_from_client_normal_unbuffered, Nombre total de lignes lues par le client d’un résultat sans tampon créées par une
rows_fetched_from_client_ps_unbuffered requête «normale» ou une déclaration préparée.
rows_fetched_from_client_ps_cursor Nombre total de lignes chercher par le client à partir d’un curseur créé par une déclaration
préparée.
rows_skipped_normal, rows_skipped_ps nombre de lignes ignorés lors de rinçage un jeu de résultats.
copy_on_write_saved, copy_on_write_performed retourné par le point d’extensions en mysqlnd tampons réseau interne résultat
proto_text_fetched_** Nombre total de colonnes d’un certain type récupéré un requête query
proto_binary_fetched_ *** Nombre total de colonnes d’un certain type récupéré depuis une requête préparée
www.phpsolmag.org 43
Fiche technique
ressources allouées à un jeu de résultat, dès Ces fonctions existent depuis de nombreu- était développée par MySQL AB (puis Sun
que ceux-ci ont été récupérés par le client. ses versions et sont maintenant devenues et maintenant Oracle) et avec ce changement
Par contre, vous pouvez ne pas vouloir met- des alias depuis l’apparition de ces nouvelles d’orientation, cela résout les soucis de licence
tre le jeu de résultats en tampon et donc les fonctions, comme le montre le Tableau 3. problématique provoqué dans le passé, mais
conserver plus longtemps sur le serveur, ce Ces alias sont à éviter car dans les prochai- aussi futur.
qui vous contraint d’augmenter la charge sur nes versions de PHP, elles vont disparaître.
le serveur. Hors, il est important de ne pas Autres extensions
perdre de vue, qu’il est plus facile d’avoir les Fonction supplémentaire Avec ce nouveau driver MySQLND, vous
informations mémorisées dans le tampon car Lors de la manipulation de jeu de données, pouvez aussi utiliser l’extension PDO_MyS-
le client peut s’adapter plus facilement par vous devez pouvoir traiter les données en une QL, qui hérite de l’ensemble des avantages
rapport aux serveurs. seule fois. Une nouvelle fonction a été déve- du pilote natif MySQL pour PHP. Cette bi-
Pour réaliser cette opération, il est préfé- loppée pour le driver MySQLND. bliothèque est aussi associée à PHP et par
rable d’utiliser dans un premier temps les conséquent il n’est plus nécessaire de le lier
requêtes préparées pour éviter les risques de mysqli_fetch_all : lit toutes les lignes de ré- comme avant. Cette nouvelle extension
problèmes et pour remplir la zone tampon. sultats dans un tableau se trouve aussi sous licence PHP. Mais elle
Vous pouvez utiliser la fonction mysqli_ a été complétement repensée, épurée, stable
stmt_store_result() qui vous permet d’ac- Cette fonction va permettre de répondre à et plus facile à compiler.
tiver la mise en tampon des résultats comme un besoin supplémentaire car elle retourne
le montre le Listing 8 (cache requête). Le ré- en seule fois les lignes de résultat dans un ta- Conclusion
sultat que vous obtenez est de 38. bleau. Pour utiliser la fonction, vous pouvez La librairie MySQLND est apparue pour ré-
Dans notre exemple, pour envoyer le jeu de voir le Listing 9 (lecture de toutes les lignes d’un pondre aux différents problèmes et attentes
résultats dans la zone tampon, d’autres fonc- tableau). Cette fonction va consommer plus des utilisateurs. Lorsque vous développez, il
tions sont nécessaires : de mémoire que la fonction comme mysqli_ est préférable d’utiliser la dernière version
fetch_array() mais vous sera utile seule- de PHP pour bénéficier de l’ensemble de ces
• mysqli _ stmt _ execute : exécute une ment pour envoyer le jeu de données vers nouveautés.
requête préparée. une autre interface pour être analysé.
• mysqli _ stmt _ store _ result : stocke
un jeu de résultats depuis une requête Licence
préparée. La licence de distribution de MySQLND est
• mysqli _ stmt _ close : termine une re- une licence PHP car avant avec libmysql, cel-
quête préparée. le ci était sous licence MySQL. Cette licence
CHRISTOPHE VILLENEUVE
Tableau 3. Fonctions MySQLND et alias Consultant PHP pour Alter Way solutions, Auteur
Fonctions MySQLND Alias du livre PHP & MySQL-MySQLi-PDO, Construi-
sez votre application, 2ème édition, livre français
mysqli_stmt_execute mysqli_execute aux Editions ENI. Trésorier AFUP et contributeur
mysqli_stmt_store_result mysqli_store_result de nombreux sites touchant PHP dont Nexen.net,
PHP Team, PHPTV...
mysqli_stmt_close mysqli_close
Contacter l'auteur : http://www.hello-design.fr
44 4/2010
MySQLND
www.phpsolmag.org 45
Sécurité
PHP
et la sécurité
Le Common Vulnerabilities and Exposures (en abrégé
CVE) énumère plusieurs vulnérabilités affectant PHP.
Ces vulnérabilités peuvent être utilisées par des hackers
pour modifier le contenu ou le comportement d’un site
ou d’une application web PHP.
• A1 : Injection (SQL, OS et LDAP).
Cet article explique : Ce qu’il faut savoir : • A2 : Cross-Site Scripting (XSS).
• Les vulnérabilités liées au PHP. • Avoir des connaissances de base en PHP. • A3 : Broken Authentication and Session
• Les vulnérabilités liées aux formulaires. Management.
• Les vulnérabilités liées aux sessions. • A4 : Insecure Direct Object References.
• A5 : Cross-Site Request Forgery (CSRF).
• A6 : Security Misconfiguration.
• A7 : Insecure Cryptographic Storage.
• atteinte à l'intégrité et à la fiabilité des • A8 : Failure to Restrict URL Access.
données et du système les hébergeant ; • A9 : Insufficient Transport Layer Protec-
Niveau de difficulté • atteinte au contenu et au comportement tion.
du système gérant les données ; • A10 : Unvalidated Redirects and Forwards.
• etc...
Les vulnérabilités liées au PHP,
N.B : Les vulnérabilités évoquées dans cet le Safe Mode
L
e but visé n’est pas de vous mon- article ne sont pas propres à PHP ; elles tou- Le Safe Mode est le mode de sécurité de PHP :
trer comment utiliser les attaques chent également les autres langages. une solution au problème de partage de PHP
mais plutôt comment s’en prémunir sur un serveur. Ce système pêche au niveau
et comment sécuriser vos sites et vos appli- Liste des principales de l’architecture car il n’est pas correct de
cations web. vulnérabilités OWASP TOP TEN tenter de résoudre ce problème au niveau de
2010 PHP, mais les solutions alternatives basées sur
Un Rappel des risques liés L’Open Web Application Security Project (en le serveur web et le système d’exploitation ne
au manque de sécurité abrégé OWASP) est une communauté open sont pas réalistes. De nombreux intervenants,
Commençons tout de même par un bref rappel source qui travaille sur le développement notamment les fournisseurs d’hébergement,
des risques liés au manque de sécurité. En effet, et le maintien des applications web fiables utilisent le Safe Mode. Le Safe Mode est obso-
un site ou une application web non sécurisés et sécurisées. L’OWASP Top Ten est un clas- lète depuis PHP 5.3.0 et est supprimé dans
sont exposés au contournement de la politique sement qui recense les vulnérabilités les PHP 6.0.0. (Paragraphe tiré du site www.php.
de sécurité entrainant les risques suivants : plus répandues sur le web. La dernière ver- net).
sion de ce Top Ten a été officiellement pré-
• atteinte à la disponibilité et la confiden- senté le 19 avril 2010 et contient les failles Listes des fonctions
tialité des données ; suivantes : potentiellement vulnérables
Plusieurs fonctions PHP peuvent être utilisées
pour mener des attaques ; elles sont donc à uti-
Terminologie liser avec précautions. Les fonctions concer-
XSS : Cross Site Scripting. nées sont (la liste n’est pas exhaustive) :
PDO : PHP Data Objects.
SGDB : Système de gestion de base de données. • pack() et unpack() : elles sont à l’origi-
CVE : Common Vulnerabilities and Exposures. C’est un dictionnaire des informations publiques re- ne d’une vulnérabilité de type déborde-
latives aux vulnérabilités de sécurité. Le dictionnaire est maintenu par l’organisme MITRE, soute- ment de mémoire ;
nu par le Département de la Sécurité intérieure des États-Unis (définition tirée de Wikipédia). • unserialize() : Cette fonction peut
SESSID : Identifiant de session. être exploitée pour un accès non autori-
OWASP : Open Web Application Security Project. sé à des données ou l’exécution de code
arbitraire ;
46 4/2010
Vulnérabilités affectant PHP
<?php
Les différents types de Cross
Site Scripting if (isset($ _ GET['message']))
{
Les attaques XSS sont de trois types : $message = htmlentities($ _ GET['message']);
• Persistant ou permanent : dans le champ d’un formulaire ou dans une être codé en base64 et placé dans une balise
Ce genre d’attaque permet d’effectuer URL génère une boîte de dialogue ; on peut Meta :
des attaques très puissantes et d’affecter donc conclure que l’application Web est
plusieurs utilisateurs à la fois. Il se pro- faillible aux attaques XSS. <META HTTP-EQUIV="refresh"
duit lorsque les données saisies par l’uti- Certaines attaques peuvent être effectuées CONTENT=»0;url=data:text/html;base64,
lisateur ne sont pas vérifiées avant d’être sans la balise <script></script>. D’autres PSPcxmzPS3qsWiipydCgzdHKzeDSLite2andX
enregistrées dans une base de données fonctions JavaScript peuvent être utilisées BOX»>
ou un fichier situé sur le serveur comme par exemple :
Exemple d’une attaque XSS
• Non-persistant ou non-permanent : • <body onload=alert('Attaque XSS')> Considérons un simple formulaire d’envoi de
C’est de loin le type de XSS le plus cou- • <b onmouseover=alert('Attaque messages pour illustrer une attaque XSS (voir
rant ; il intervient lorsque les données XSS!')>Salut!</b> Listing 1).
fournies par l’utilisateur sont utilisées • <img src="http://exemple.com/not. Un utilisateur de mauvaise foi pourrait sai-
par le serveur sans vérifications préala- exist" onerror=alert(document. sir dans le champ message le script présenté
bles pour ensuite être affichées sans en- cookie);> dans le Listing 2.
codage des caractères spéciaux HTML. Le prochain utilisateur qui visitera le site
Les filtres de contrôle peuvent aussi être avec JavaScript activé, sera automatiquement
Les balises utilisées par les contournés par l’usage des chaînes de ca- redirigé vers la page http://exemple.com/ ;
attaques XSS ractère encodées dans la balise img : <img tous les cookies associés au site seront inclus
Si la saisie du code JavaScript <script src=javascript:alert(‘XSS attack')>. Les dans la requête de l’URL. Une écriture plus
type=»text/javascript»>alert('Attaque notations UTF-8 offrent encore plus de possi- saine de notre formulaire d’envoi de messages
XSS')</script> bilités aux pirates. Le script malveillant peut ressemblerait à ceci (voir Listing 3).
www.phpsolmag.org 47
Sécurité
Listing 6. Création d’un nouvel utilisateur ayant des droits absolus Le Cross Site Request Forgeries
<?php Le cross site request forgeries ou CSRF (pro-
// la valeur 0; sert à terminer correctement la requête originale noncé Sea Surf) exploite les utilisateurs à leur
0;*
insu en les rendant complices des attaques
//création d'un super utilisateur
UPDATE user SET Password=PASSWORD('crack') WHERE user='root'; c’est à dire qu’il s’appuie sur l’authentifica-
//Nettoyage de certains caches internes de MySQL tion d’un utilisateur pour envoyer des requê-
FLUSH PRIVILEGES;
?>
tes HTTP afin de déclencher des actions mal-
veillantes de façon transparente aux yeux de
Listing 7. Révélation des mots de passe l’utilisateur piégé. Ce genre d’attaque à l’ap-
parence légitime est très difficile à détecter.
<?php
'
//combinaison de deux requêtes select Les moyens pour se protéger
union select '1', concat(username||'-'||password) as name, '1982-04-25', '0'
from User;
des CSRF
-- Contrairement aux attaques, il n’existe pas
?> de techniques fiables pour se protéger des
CSRF. La prévention est le moyen le plus effi-
Listing 8. Exemple de code de protection contre la fixation de session
cace pour y remédier ; il faut donc appliquer
<?php un certain nombre de mesures :
//Initialisation de la session
session _ start();
//Récupération et modification l'identifi ant courant de session • Optez pour l'utilisation de la métho-
$old _ session = session _ id(); de POST plutôt que pour la méthode GET
//Test si la session est vide
dans vos formulaires.
if (empty($ _ SESSION['valide'])){
/ * Remplacement de l'identifi ant de session courant par un • Utilisez des jetons pour vérifier la durée
nouveau tout en conservant les valeurs de session. */ de vie des formulaires (voir Listing 4).
session _ regenerate _ id(TRUE);
$ _ SESSION['valide'] = TRUE;
} Le code de vérification du jeton doit être ap-
?> pliqué à un formulaire contenant un champ
jeton de type hidden (Listing 5).
L’ajout de la fonction htmlentities (Lis- Les méthodes pour éviter • Utilisez un Captcha avant chaque action
ting 3) permettra de convertir les chaînes de les attaques XSS critique (ajout, suppression, édition)
caractères en entités HTML. Cette conver- pour être sûr que c’est bel et bien l’uti-
sion empêche le navigateur de traduire les • On ne le dira jamais assez ; le contrôle lisateur qui a demandé l’exécution de
caractères en entité HTML ; ce qui désactive des données entrées par les utilisateurs cette action et non un robot automatisé
complètement les codes et les scripts postés est indispensable. En effet, pour les si- malveillant.
par des utilisateurs malveillants. Ainsi le na- tes sur lesquels les textes soumis par les
vigateur interprètera le script ajouté par le pi- utilisateurs sont visibles à tout le monde, Les injections SQL
rate comme étant du texte brute sans redirec- il faut veiller à ce que les utilisateurs ne Beaucoup de webmasters et développeurs
tion ni vol de cookies. Le message posté par soient pas en mesure d'activer du code et semblent ignorer la puissance et la por-
le pirate sera affiché comme un texte anodin des scripts qui pourraient nuire à l'image tée que peuvent avoir une simple requête
et inoffensif. de ces sites. SQL et qu’entre les mains d’un fin pirate,
48 4/2010
Vulnérabilités affectant PHP
www.phpsolmag.org 49
Pour les débutants
Un comparatif
de forums PHP
Quand on a un site qui se développe, il peut être
nécessaire de créer un espace de discussion : un forum.
En faisant des recherches, vous constaterez que l'on peut
se retrouver perdu avec les différents types de forum
trouvés. Dans cet article, essayons d'y voir plus clair.
Si la console d’administration peut paraî-
Cet article explique : Ce qu'il faut savoir : tre lourde au début, elle devient rapidement
• Les plus et plus moins des principaux fo- • Le principe d'un forum. conviviale.
rums en PHP. Points forts : communauté française im-
portante, beaucoup d’outils existent. Points
faibles : les pirates connaissent bien phpBB,
beaucoup de tables dans la base de don-
nées.
mars 2010 , l’installation se passe sans diffi-
culté majeure. Voir la Figure 1. PunBB
Niveau de difficulté Maintenant que vous avez téléchargé la ver- PunBB a été pratiquement le premier réel
sion, il faut se rendre sous le répertoire install concurrent à phpBB. La dernière version est
pour effectuer l’installation. référencée 1.3.4.
Cette installation se fait en moins de 5 mi- L’installation diffère globalement de celle
L
es premiers forums dignes de ce nom nutes. Au préalable, il faut cependant créer la de phpBB mais au final, en quelques clics, elle
sont nés aux débuts des années 2000 base de données (par exemple via l’outil php- est effectuée correctement. Voir la Figure 2.
et ils se sont largement développés MyAdmin) et après l’installation, une vérifi- Même remarque pour PunBB que pour
avec l’arrivée de la notion de web 2.0 . Qui cation est effectuée. phpBB au sujet du préfixe des tables dans
dit croissance, dit concurrence, dit large aug- Ainsi, vous allez devoir vous connecter sur la base de données et concernant la création
mentation de l’offre et au final, le webmaster votre serveur puis supprimer le répertoire ins- préalable de la base de données du forum.
sera un peu perdu dans son choix. tall. Une suppression totale de ce répertoire est A la fin de l’installation, punBB propo-
Alors, s’il est indéniable qu’un forum ap- en effet préférable au niveau de la sécurité. se de se connecter automatiquement à la
porte à un site, il ne faut pas faire n’importe Le plus souvent, le webmaster laisse com- console d’administration du forum et plus
quoi car la charge de travail est importante et me préfixe des tables qui seront créées phpbb particulièrement à toute une série d’infor-
la migration vers un autre type de forum sera (voir la première image de l’ordonnancement mations concernant votre serveur. Voir la
très fastidieuse. de l’installation). Changer ce préfixe peut Figure 3.
Avec un forum, l’internaute va découvrir être un élément de sécurité de lutte pour les Beaucoup de webmasters sont passés d’un
une autre partie de votre site où il pourra par- pirates ou du moins, changer de préfixe fera forum phpBB à un forum punBB. Le forum
ticiper aux échanges, proposer des idées. Cet perdre du temps aux pirates et les pirates dé- punBB présente quelques avantages non né-
article vous propose de décortiquer, d’ana- testent perdre du temps. gligeables.
lyser, de comparer 5 forums développés en Avant d’ouvrir réellement votre forum sur Points forts : peu de tables dans la base de
PHP. votre site Internet, il est nécessaire de pas- données, croissance importante. Points fai-
ser du temps – et le plus possible au début bles : communauté française moyenne, man-
PhpBB – pour administrer votre forum. que de versions.
Ce forum est très probablement un des pre-
miers à avoir vu le jour sur Internet. Fort
Sur Internet
de cette position et renforcée pour une
communauté importante et fidèle – plu- • http://www.phpbb.com/ – Pour installer le forum phpBB,
sieurs millions de forums de ce type dans • http://punbb.informer.com/ – Pour installer le forum punBB,
le monde -, ce type de forum est toujours • http://www.invisionpower.com/ – Pour installer le forum Invision Power Board,
• http://www.vbulletin.com/ – Pour installer le forum vbulletin,
bien placé.
• http://www.simplemachines.org/ – Pour installer le forum SMF.
Après avoir téléchargé la dernière version,
référencée «Olympus» 3.0.7-PL1 qui date de
50 4/2010
Forums PHP
SMF
Terminons par un autre forum php gratuit : SMF comme Simple Ma-
chines Forum.
Nous avons installé la version référencée SMF 2.0 RC3. Le premier
intérêt de SMF est lors de l’installation. En effet, cette installation ne se
fait pas en téléchargeant une archive mais simplement en téléchargeant
un fichier de … 60 KO.
Il faut se rendre sur le site officiel de ce forum – http://www.simple-
machines.org/ – puis après avoir cliqué sur Download, on se rend en bas
de la page dans la partie Webinstall – The simple way to get SMF.
Pour le webmaster, c’est intéressant de ne télécharger qu’un petit
fichier. Pour la suite de l’installation, pas de changement particulier.
Après avoir copié le fichier d’installation dans le répertoire souhaité, il
suffit de suivre l’installation pas à pas. Voir la Figure 4.
Lors de l’installation, on remarque également que l’on peut choi-
sir la langue française, ce qui est toujours préférable quand on n’est
pas bilingue. De plus, on constate également que les étapes sont bien
décrites pas à pas et que l’on peut suivre l’état d’avancement douce-
ment.
Quant à la console d’administration, elle ressemble à celles des
autres forums gratuites.
Quant à la communauté française, elle est visible sur ce site : http://
www.simplemachines-fr.org/ . Elle n’est pas très active et comptabilise
moins de 1000 membres mais elle augmente tout de même.
Points forts : installation possible avec un seul fichier, croissance Figure 1. Ordonnancement des pages lors de l’installation d’un forum
importante. Points faibles : communauté française limitée, beaucoup phpBB
de tables dans la base de données.
Vbulletin
Après avoir décrit plusieurs forums de type PHP gratuits, il est intéres-
sant de comparer avec une version payante. En effet, si la majorité des
forums sont gratuits, il existe des versions commerciales donc payan-
tes. Pour ce premier exemple, on va regarder Vbulletin.
Vbulletin a publié une version 4 mais malheureusement, rapide-
ment, il a été découvert une faille XSS. La dernière version stable est la
4.0.2 Suite PL1 . S’il n’est pas rare de découvrir une faille rapidement
avec la mise en production d’une nouvelle version, il est étonnant que
cela arrive pour une version commerciale.
Un patch de correction a été mis à disposition dans un délai court
mais ceci provoque toujours du travail supplémentaire pour le web-
master.
La version forum basique de Vbulletin coûte environ 135 euros. Il
existe également une version payante que l’on pourrait nommer suite
Vbulletin qui coûte environ 190 euros. Les prix sont dégressifs en fonc-
tion du nombre de version achetée. Voir la figure 5.
Alors, quelles sont les différences majeures entre les deux ver-
sions ?
Pour l’offre majeure (nommée suite Vbulletin), on peut créer des
tickets de support et il est également possible de créer des blogs. A no-
ter également que l’on peut créer un site de type CMS. Pour voir un
exemple des possibilités de cette option de Vbulletin, rendez-vous sur
la page d’accueil du site officiel de Vbulletin, partie forum puis choix
Home.
Voici une liste non exhaustive des possibilités :
www.phpsolmag.org 51
Pour les débutants
52 4/2010
Forums PHP
Conclusion
Un webmaster connaît probablement d’autres webmasters. Le pre-
mier réflexe à avoir est de se renseigner auprès d’eux pour en savoir
plus sur le forum utilisé. A partir de telles informations et de cet
article, le choix d’un forum peut se faire plus facilement. Un forum
doit être jugé non seulement en fonction du paramètre prix mais éga-
lement en fonction de la charge serveur. On peut voir dans le tableau
récapitulatif que chaque type de forum a un sérieux atout. Pour
phpBB, on peut compter sur une communauté très importante mais
ce forum utilise plus de 60 tables alors que pour punBB, si la com-
Figure 6. Le forum IPB en démonstration munauté est moins grande, il en est de même pour la charge serveur,
donc il peut avoir plus de monde sur un serveur donné que pour le
type phpBB.
Suivant votre budget, suivant le temps que vous avez à consacrer
à votre forum, vous avez déjà limité l’offre. A vous de faire le bon
choix.
ERIC VINCENT
Eric VINCENT est informaticien de gestion à l’origine et il s’est orienté vers In-
ternet au début des années 2000. Il a créé plusieurs sites Internet thémati-
ques, principalement sur le sport et il possède un forum thematique très im-
Figure 7. La console d’administration d’un forum IPB portant. Pour contacter l’auteur : [email protected]
www.phpsolmag.org 53
Linux
P
uppy Linux est une distribution Linux milial : traitement de texte, tableur, retou- • disque dur,
créée par Barry Kauler en 2002 et cons- che d’images, lecteur multimédia, internet, • une clé USB ou tout type de mémoire
tamment améliorée par son auteur tchat, etc... flash associé à un lecteur,
et une communauté active de développeurs. Toutou Linux essaie de paramétrer seul vo- • un CD/DVD,
Grâce aux efforts de Jean-Jacques Moulinier, tre matériel, trouve et monte toutes les parti- • un lecteur ZIP,
la version française de Puppy Linux, à savoir tions en lecture/écriture même le NTFS. En • une machine virtuelle,
Toutou Linux est née ! Quelques différences complément, elle intègre un grand nombre • un réseau éthernet,
existent mais pour le plus grand bonheur des de scripts pour la configuration du matériel • etc...
utilisateurs francophones. Ces distributions et de l’interface utilisateur.
en sont, à l’heure d’écrire ces quelques lignes, A la fin de votre session, Toutou Linux en- Sur certaines machines, pas forcément très ré-
à la version 4.3.1 Pourquoi vous parler encore registre tous vos paramètres et vos données centes, il sera nécessaire d’utiliser une disquet-
d’une énième distribution Linux et pourquoi soit sur une partition Windows, Linux ou te de boot afin de permettre le chargement du
l’utiliser ? J’ai découvert cette distribution il même sur le CD/DVD Live lui-même ! Cet- système contenu sur une clé USB. Dans tous
y a quelque temps. Elle m’avait bluffé de par te distribution est en effet capable d’écrire les cas, il faudra paramétrer le BIOS en consé-
sa petite taille, sa rapidité et surtout par l’inté- vos paramètres et données sur ces supports quence : démarrage sur USB/CDROM/ZIP...
gration des dernières technologies. Elle savait à condition qu’ils soient multi-session. Ain- en premier. Le plus simple ici est de récupérer
déjà gérer la gravure sur Blu-ray ! La partie wi- si, chaque session de travail représentera l’image iso de la distribution :
fi est également bien supportée !
Cette distribution est donc fiable, facile
d’utilisation tout en étant particulièrement
Astuces
légère puisqu’elle n’occupe qu’un peu plus
Une petite astuce qui est plus une mise en garde, faites attention à la façon dont sont nom-
de 110 Mo sans sacrifice au niveau des fonc- més certains fichiers. Ainsi si vous faîtes une impression d’écran avec la touche Impr écran, Tou-
tionnalités. Elle intègre la gestion des maté- tou Linux vous propose d’enregistrer le résultat sur le disque en utilisant par défaut l’heure de
riels les plus récents mais reste aussi adaptée création comme début du nom (15:30:20.jpg). Aucun souci pour des partitions Linux. Mais ce
aux anciens ordinateurs. En effet, la spéci- nom posera problème au niveau NTFS et FAT de Windows. Le caractère : étant interdit pour le
ficité de Toutou Linux (et donc de Puppy nommage des fichiers. Si cela arrive, Windows sera incapable de les lire, de les ouvrir ou même
Linux) est qu’elle se charge entièrement en de les supprimer. Il faudra revenir à Linux et les renommer...
RAM. Cela permet un accès plus rapide au
54 4/2010
Puppy Linux
Premiers pas
Allez ! Que diable ! Redémarrez au plus vite
votre ordinateur pour voir enfin se charger
cette distribution ! Après quelques informa-
tions données sur le chargement en mémoire,
la reconnaissance des périphériques, il vous
sera demandé de choisir votre type de clavier
(donc fr pour nous français !). Viendra ensui-
te le choix du serveur graphique. Préférez xorg Figure 2. Tableau de bord - Installation
pour les machines récentes et xvesa pour les
plus anciennes. De toute façon, essayez xorg du bureau et qu’il devient plus difficile de Sur le bureau, l’icône paramètres vous per-
en premier, cela ne coûte rien ! Sélectionnez les différencier...Pour information, Puppy/ mettra de régler le matériel et le système en
ensuite la résolution de votre écran associée Toutou Linux utilisent l’environnement lui-même. C’est également à partir de cet
au nombre de couleurs. Les moniteurs CRT de bureau ROX et le gestionnaire de fenê- endroit que vous pourrez installer la distri-
et bien sûr les moniteurs LCD sont reconnus tre JWM. bution sur un autre support (clé USB, ZIP,
convenablement. Une boîte de dialogue se tient au centre disque dur...) (Figure 2). Cette méthode
Le serveur graphique démarre automati- de l’écran vous proposant de vous docu- présente l’avantage d’être entièrement auto-
quement et le magnifique bureau de Tou- menter de façon rapide sur la distribution, matisée mise à part l’installation sur disque
tou Linux (Figure 1) finit par s’afficher. de régler les paramètres de localisation, de dur. Dans ce cas, vous aurez à partitionner
Les utilisateurs des versions précédentes gérer la connexion internet/lan, de confi- votre disque comme pour n’importe quelle
auront tout de suite remarqués que les gurer une imprimante, etc...Vous verrez autre distribution sous peu que l’on choi-
couleurs bleutées des versions antérieures que tout est conçu pour faciliter la vie de sisse une méthode autre que l’installation
laissent ici la place à un nouveau thème. l’utilisateur et ainsi ne jamais le prendre automatique ! Là encore, Toutou Linux in-
Je le trouve, pour ma part, plus joli et plus au dépourvu. Rares seront les cas où il fau- tègre un logiciel de partitionnement !
harmonieux. Certains diront que la cou- dra se débrouiller seul en ligne de com- Dans la barre du bas, à côté de l’heure, le
leur des icônes est trop proche du thème mandes. taux d’occupation de la RAM est présent.
www.phpsolmag.org 55
Linux
56 4/2010
Puppy Linux
• http://infoprographiesimple.free.fr/toutou_linux_usb/toutou_linux_usb.
php
• http://toutoulinux.free.fr/tuto.php
• http://www.libellules.ch/phpBB2/mettre-en-reseaux-toutou-linux-et-win- LAURENT DEROSIER
dows-t26841.html Laurent DEROSIER a découvert Linux en 2003. Il
• http://zorgue.over-blog.fr/article-34251288.html s’efforce depuis de partager sa passion pour ce
système. Il travaille dans le domaine des réseaux
et des serveurs à base d’Unix.
www.phpsolmag.org 57
Dans le prochain numéro de
Le périodique phpsolutions est publié par Bêta-testeurs : Fabrice Gyre, Brice Favre, Valérie Viel, Aymeric Lagier,
Software Press Sp. z o.o. SK Christophe Milhau, Alain Ribault, Stéphane Guedon, Eric Boulet,
Bokserska 1, 02-682 Varsovie, Pologne Mickael Puyfages, Christian Hernoux, Isabelle Lupi, Antoine Beluze,
Tél. 0975180358, Fax. +48 22 244 24 59 Timotée Neullas, Yann Faure, Adrien Mogenet, Jean-François Montgaillard,
www.phpsolmag.org Turmeau Nicolas, Jonathan Marois, Wilfried Ceron, Wajih Letaief,
François Van de Weerdt, Jeremy Rafflin, Eric Vincent.
Président de Software Press Sp. z o.o. SK : Paweł Marciniak Les personnes intéressées par la coopération sont priées de nous contacter :
[email protected]
Directrice de la publication : Ewa Łozowicka
Publicité : [email protected]
Dépôt légal : à parution
ISSN : 1731-4593
Pour créer les diagrammes on a utilisé le programme
Rédacteur en chef : Łukasz Bartoszewicz
Maquette : Agnieszka Marchocka
Couverture : Agnieszka Marchocka AVERTISSEMENT
Les techniques présentées dans les articles ne peuvent être utilisées qu’au
DTP : Sławomir Sobczyk [email protected] sein des réseaux internes. La rédaction du magazine n’est pas responsable
Composition : Sławomir Sobczyk de l’utilisation incorrecte des techniques présentées. L’utilisation des techniques
Correction : Valérie Viel, Jonathan Marois, Alain Ribault présentées peut provoquer la perte des données !
PRATIQUE OUTILS
Les DAO en PHP Un moteur de template : Smarty
Un DAO (Data Access Object ou object d’accès aux données) est Qu’est-ce qu’un moteur de template ? Pourquoi utiliser un tel
un objet qui fournit une interface générique d’accès aux données outil ? Cet article vous présente les moteurs de template et plus
persistantes stockées en base de données ou dans des fichiers particulièrement Smarty. Vous apprendrez ce que sont les
par exemple. Le modèle DAO est un motif de conception qui moteurs de template et plus particulièrement Smarty et vous
permet de ne pas exposer la structure d’une base de données verrez comment intégrer Smarty dans vos applications..
et de séparer la logique métier de celle de l’accès aux données.