1 Pages web dynamiques. 2 Un exemple. 2.1 Objectif



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

TP JAVASCRIPT OMI4 TP5 SRC

Programmation Web. Madalina Croitoru IUT Montpellier

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

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

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Rapport de stage. Création d un site web. Stage du 20/01/2013 au 21/02/2013

SYSTÈMES D INFORMATIONS

FTP : File TRansfer Protocol => permets d envoyer des gros fichiers sur un serveur (ou de télécharger depuis le serveur)

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

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

Formation Webmaster : Création de site Web Initiation + Approfondissement

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

Architectures web/bases de données

1. La plate-forme LAMP

Créer un site Web : mode d emploi Sous SPIP, avec le squelette «établissement» de l académie de Versailles

RÉALISATION D UN SITE DE RENCONTRE

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

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

Administration du site (Back Office)

Guide d utilisation 2012

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var - E mail : bij@agasc.fr / Tel : CONSIGNE N 1 :

Joomla! Création et administration d'un site web - Version numérique

Module BD et sites WEB

SOMMAIRE. 3. Comment Faire? Description détaillée des étapes de configuration en fonction du logiciel de messagerie... 3

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

POVERELLO KASONGO Lucien SIO 2, SISR SITUATION PROFESSIONNELLE OCS INVENTORY NG ET GLPI

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

CAPTURE DES PROFESSIONNELS

Campagnes d ings v.1.6

Direction générale statistique et information économique. Manuel d usage : l application web pour l enquête sur la structure des entreprises

Manuel d'installation de GESLAB Client Lourd

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

Guide d implémentation. Réussir l intégration de Systempay

Transfert d un site local vers un serveur. NPDS REvolution 13. Rédaction : Axel Relecture : Dev & Jpb

Hébergement de sites Web

Formation Site Web. Menu du jour. Le web comment ça marche? Créer un site web Une solution proposée pour débuter La suite?

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

EXTENSION WORDPRESS. Contact Form 7. Proposé par :

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Manuel d utilisation de mon.vie-publique.fr

Formation. Module WEB 4.1. Support de cours

WIMS. Découvrir et utiliser

Préparation à l installation d Active Directory

1 Démarrage de Marionnet

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

Etude et développement d un moteur de recherche

Association UNIFORES 23, Rue du Cercler LIMOGES

Guide d utilisation. Version 1.1

2 LES BASES DU HTML 19 Qu est-ce que le HTML? 20 De quand date le HTML? 20 Écrire son propre code HTML 22

Programmation Web. Introduction

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

Exonet : sauvegarde automatisée d une base de données

Projet en nouvelles technologies de l information et de la communication

Gestion d'un parc informatique avec OCS INVENTORY et GLPI

Création de site Internet avec Jimdo

GUIDE ADMINISTRATEUR BIEN DÉMARRER AVEC WISEMBLY

Bases de Données et Internet

Sommaire : Pourquoi créer un site web? Qu est-ce qu un site Web? Les différents types de sites. Quelles solutions peuvent être employées?

Tutoriel Création d une source Cydia et compilation des packages sous Linux

FAIRE UN PAIEMENT TIPI

Diffuser un contenu sur Internet : notions de base... 13

Accès distant Freebox v6 Configuration

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

KWISATZ MODULE PRESTASHOP

TUTORIEL : Formulaire sur Google : Saisie des réponses questionnaires comptoir Mise en place de questionnaires à distance

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

Failles des applications Web. Ce document est extrait du travail de diplôme de M. DIZON dans l état.

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

Tuto 2 : Configuration Virtual box, Configuration et installation du serveur XiBO

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Guide Reseller Onbile

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

ENVOI EN NOMBRE DE Mails PERSONNALISES

SurveyMonkey Un outil de sondage électronique. Objectifs

S y m M a i l i n g. S o l u t i o n d e - m a i l i n g. SymMailing est un outil professionnel de création et de gestion de campagnes d ing.

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

Editer un script de configuration automatique du proxy

Présentation du Framework BootstrapTwitter

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

Construction d un Site Internet Dynamique avec Joomla René-Yves Hervé, Ph.D.

Manuel : Comment faire sa newsletter

Fiche aide pour votre messagerie Outlook, thunderbird, Gmail

Groupe Eyrolles, 2003, ISBN : X

Mon-complement-retraite.com Aide en ligne

K?ellaWeb Saisie des absences, retards et sanctions APLON en mode Web

HTML. Notions générales

Pratique et administration des systèmes

Comment paramétrer correctement son compte Facebook pour pouvoir protéger un maximum ses données et sa vie privée.

Le serveur web Windows Home Server 2011

Manuel du composant CKForms Version 1.3.2

INCORPORER EXCEL EN LIGNE DANS UN FICHIER CRÉÉ AVEC L ÉDITEUR DE TEXTE 15 avril 2015

Prise en main rapide

Ces Lettres d informations sont envoyées aux extranautes inscrits et abonnés sur le site assistance (voir point N 3).

SYSTÈMES DE PUBLICATION POUR L INTERNET. Beatep Marie-France Landréa - Observatoire de Paris

NOTICE TELESERVICES : Créer mon compte personnel

Guide d installation de Gael

1 / Introduction. 2 / Gestion des comptes cpanel. Guide débuter avec WHM. 2.1Créer un package. 2.2Créer un compte cpanel

Transcription:

1 Pages web dynamiques En schématisant on peut considérer que l accès à une pager web depuis une machine s effectue selon une architecture client/serveur. La machine client émet une requête de page web et la machine serveur lui répond en lui envoyant cette page. Pour les pages web les machines dialoguent selon le protocole HTPP. La page web retournée par le serveur peut être statique : c est un fichier d extension.html qui se trouve dans l arboresence du serveur et contenant du code HTML/CSS qui sera interprété par le navigateur du client pour afficher la page. De nos jours, les sites contiennent souvent des pages web dynamiques dont le contenu peut varier selon le client qui la demande. Dans ce cas le serveur exécute d abord un script qui récupère les variables envoyées par le client (à travers un formulaire ou un cookie par exemple) puis génère du code HTML/CSS. le serveur retourne la page web au client. Ce dernier reçoit le code HTML/CSS mais pas le code du script générateur. Les scripts qui servent à générer des pages web sur le serveur sont généralement écrits en langage PHP. C est la technique la plus rapide, mais l interface de programmation CGI (Common Gateway Interface) permet d utiliser n importe quel langage de script dont l interpréteur est installé sur le serveur. En général sur un serveur Apache installé sous Linux, les pages webs en.html et les scripts en.php doivent être placés dans le répertoire /var/www et les scripts CGI dans /var/www/cgi-bin. Le serveur porte le nom d utilisateur www-data. Il faut penser à rendre exécutables les scripts par tous (other). Pour notre part, nous installerons le serveur Apache avec PHP avec les extensions réalisées par Jean-Claude Meilland et disponibles sur son site megamaths.free. Les fichiers de configuration d Apache sont modifiés pour permettre l exécution de scripts PHP ou Python à partir du répertoire /home/user/apache qu il faut créer. Cependant il faudra toujours penser à rendre exécutable les scripts pour tous (clic droit puis permissions). Le répertoire /home/user/apache est alors accessible en tapant l adresse IP 127.0.0.1 ou son alias localhost dans la barre d adresse d un navigateur. Pour exécuter le fichier testcgi.py placé dans le répertoire /home/user/apache/python, on pourra taper http://localhost/python/testcgi.py dans la barre d adresse d un navigateur. 2 Un exemple 2.1 Objectif Dans cet exemple nous allons écrire deux scripts Python : formulaire.py pour générer une page web qui affichera un formulaire où le client saisira ses nom, prénom, catégorie (élève/professeur), le chemin d un fichier image à transmettre et sélectionnera la nature de l image (photo, peinture... ). traitement.py pour générer une page web qui affichera le résultat du traitement du formulaire : nom, prénom, catégorie de l expéditeur et image envoyée. Les fichiers formulaire.py et traitement.py sont disponibles dans la Dropbox. 2.2 Principes d écriture d un script CGI Pour l instant, je n arrive pas à utiliset Python3 avec le serveur donc nous programmerons en Python2 (alias python dans notre distribution Linux). Tous les scripts Python que nous exécuterons devront commencer par le préambule suivant : 3 print "Content-Type: text/html \n" La ligne 1, dite de shebang, indique au serveur où il peut trouver l interpréteur Python sur sa machine. Pour info env est un utilitaire shell qui va lancer correctement la commande qu on lui passe en paramètre (ça devrait marcher avec python3 mais bon...) La ligne 2 précise l encodage du fichier. Page 1/7

La ligne 3 affichera le type MIME du contenu dans l en-tête du fichier généré. Les types MIME constituent une classification des différents contenus transportés sur Internet. Ils ont été initialement définis pour les contenus des mails. Cette déclaration est indispensable, le serveur pourra ainsi insérer le type MIME dans le header HTPP du fichier envoyé et le navigateur pourra correctement l interpréter. Le reste du fichier peut être codé en Python comme d habitude en gardant à l esprit que tout ce qui est retourné vers la sortie standard (par print par exemple) va correspondre au contenu de la page HTML que l on souhaite générer. Exemple d un script CGI : 3 print "Content-Type: text/html \n" 4 5 print """<!DOCTYPE html > 6 <html > 7 <head> 8 <title>premier exemple de scritp CGI </title> 9 <meta charset="utf-8"/> 10 </head> 11 <body> 12 <h1> Ceci est un titre </h1> 13 """ 14 15 for i in range(1,6): 16 print <p> Ceci est un paragraphe. <br/> Bonjour %s fois. </p> %i 17 18 print """ 19 </body> 20 </html>""" Le code HTML reçu par le client est : 1 <!DOCTYPE html > 2 <html > 3 <head> exemplecgi.py 4 <title>premier exemple de scritp CGI </title> 5 <meta charset="utf-8"/> 6 </head> 7 <body> 8 <h1> Ceci est un titre </h1> 9 <p> Ceci est un paragraphe. <br/> Bonjour 1 fois. </p> 10 <p> Ceci est un paragraphe. <br/> Bonjour 2 fois. </p> 11 <p> Ceci est un paragraphe. <br/> Bonjour 3 fois. </p> 12 <p> Ceci est un paragraphe. <br/> Bonjour 4 fois. </p> 13 <p> Ceci est un paragraphe. <br/> Bonjour 5 fois. </p> 14 </body> 15 </html> Pour plus d informations, consultez la documentation python : http://docs.python.org/2.7/library/cgi.html 2.3 Un script qui génère un formulaire en HTML Une page HTML peut contenir un formulaire avec différents champs. Lorsque le client a rempli tous les champs, il clique sur un bouton envoyer et les données sont transmises au serveur. Page 2/7

Pour écrire un formulaire en HTML on utilise une balise <form> où l on va placer des balises de champ telles que <input> ou <select>. Voici le code du script formulaire.py qui va générer notre formulaire. 3 print "Content-Type: text/html \n" 4 5 print """<!DOCTYPE html > 6 <html > 7 8 <head> 9 <title>page HTML avec formulaire </title> 10 <meta charset="utf-8"/> 11 <link rel="stylesheet" href="styleformulaire.css"/> 12 </head> 13 14 <body> 15 16 <h1>formulaire d envoir d un fichier image</h1> 17 18 <form action="traitement.py" method="post" enctype="multipart/form-data"> 19 20 Nom : <input type="text" name="nom" id="nom"/> <br/> 21 22 Prénom : <input type="text" name="prenom" id="prenom"/> <br/> 23 24 Catégorie : <br/> 25 <input type="radio" name="categorie" value="eleve" /> Elève 26 <input type="radio" name="categorie" value="professeur" /> Professeur <br/> 27 28 Nature de l image : <br/> 29 <select name="image"> 30 <option value="peinture"> peinture </option> 31 <option value="photo" selected="selected"> photo </option> 32 <option value="logo"> logo </option> 33 <option value="dessin"> dessin </option> 34 </select> 35 <br/> 36 37 <input type="file" name="fichier"> 38 <br/> 39 40 <input type="submit" value="valider" /> 41 42 </form> 43 44 </body> 45 46 </html>""" Quelques explications : formulaire.py La balise <form> comprend deux attributs obligatoires method="post" pour préciser la méthode d envoi et action="traitement.py" pour la référence au script qui traitera le formulaire. Page 3/7

Le dernier attribut enctype="multipart/form-data" est nécessaire uniquement lorsqu on veut envoyer des fichiers. Il existe deux méthodes d envoi : "post" la plus courante et "get" la plus ancienne qui transmet les données dans l URL sous la forme d une séquence de couples variable=valeur placés après un? et séparés par un & comme ci-dessous : http://localhost/python/traitementget.py?nom=junier&prenom=frédéric&categorie=professeur Attention la méthode "get" ne peut être utilisér pour l envoi de fichiers!!! Pour la tester il faut donc supprimer l attribut enctype=multipart/form-data et le champ <input type="file" /> dans le formulaire précédent. Les fichiers formulaireget.py et traitementget.py sont disponibles sur la Dropbox. Un champ de saisie comme <input type="text" name="prenom" id="prenom"/> permet de saisir du texte qui sera envoyé au script de traitement comme valeur de la variable prenom. L attribut id est facultatif, il permet de référencer la balise dans le code HTML, il peut servir de cible pour un fichier de style en CSS. On n est pas obligé de donner le même nom aux attributs name et id mais c est souvent plus simple. Il existe d autres types de champs de saisie <input /> comme "textarea" pour des textes longs, "password" pour les mots de passe, "file" pour l envoi de fichiers, "checkbox" pour les cases à cocher (plusieurs choix possibles) ou "radio" pour les boutons de radio (un seul choix possible). Enfin pour envoyer les données du formulaire il faut insérer un bouton d envoi avec un champ <input type="submit" value="valider" />, la valeur de l attribut value étant le texte affiché dans le bouton. La balise <select name="image">... </select> permet d insérer une liste de choix optionnels sous forme de menu déroulant. Les options sont contenues dans des balises <option value="valeur de l option"> intitulé de l option </option>. Pour plus de détails sur les formulaires on pourra consulter les tutoriels du Site du Zéro (désormais OpenClassrooms) : par exemple ceux de Mathieu Nebra sur HTML/CSS ou PHP/MySQL. http://fr.openclassrooms.com/informatique/cours/apprenez-a-creer-votre-site-web-avec-html5-etles-formulaires-8 http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql/ transmettre-des-donnees-avec-les-formulaires 2.4 Un script qui traite le formulaire précédent Le script traitement.py ci-après réceptionne le formulaire envoyé par la page web générée par formulaire.py et génère une page web en réponse. Les données sont récupérées dans un objet de la classe cgi.fieldstorage() du module cgi. On assigne cet objet à une variable form avec form = cgi.fieldstorage(). Les champs du formulaire peuvent être récupérés par le biais de leur attribut name : par exemple le champ d attribut name="prenom" est stocké dans l objet form[ prenom ]. Sa valeur est accessible par form[ prenom ].value. Pour les champs qui contiennent des fichiers comme form[ fichier ], le fichier proprement dit est accessible par form[ fichier ].file, son nom par form[ fichier ].filename. On peut obtenir la liste de tous les attributs et méthodes de l objet form[ fichier ] avec dir(form[ fichier ]). Par ailleurs on utilise dans le script : La fonction cgitb.enable() du module cgitb (pour cgi trace back), qui permet, en phase de développement, l affichage des messages d erreurs Python dans le navigateur (sinon ce dernier n affiche que les messages d erreurs du serveur Apache et ceux-ci ne nous disent rien des erreurs internes au code Python). Les fonctions open() et close() d ouverture et de fermeture de fichier. Pour sauvegarder sur le serveur le fichier uploadé on a besoin de créer un répertoire upload qu on affecte au groupe du serveur (www-data) en lui donnant les droits de créer et supprimer des fichiers. Dans l extension utilisée sur la clef ISN, le serveur web (www-data) appartient au groupe de l utilisateur user (vous) mais en général ce n est pas le cas et par mesure de sécurité le serveur web n a pas forcément accès à tous les répertoires sur le serveur physique. Page 4/7

La fonction os.path.splitext() du module os.path. Elle retourne un couple formé de la racine puis de l extension d un chemin (ou nom) de fichier. On pourrait utiliser la méthode split des chaînes de caractères mais elle ne permet pas de traiter correctement les noms de fichier qui comportent des points avant l extension comme lena.1.png. 3 print "Content-Type: text/html\n" 4 5 import cgi 6 7 #pour le débogage (affichage des messages d erreur dans le navigateur) 8 import cgitb 9 cgitb.enable() 10 11 #pour traiter les chemins de fichier comme celui du fichier uploadé 12 import os.path 13 14 print """<!DOCTYPE html > 15 <html> 16 17 <head> 18 <title>résultat du traitement du formulaire</title> 19 <meta charset="utf-8"/> 20 </head> 21 22 <body> 23 24 <h1> Résultat du traitement du formulaire </h1> 25 """ 26 #on crée un objet de type dictionnaire qui récupère le formulaire 27 #les clefs sont les noms #des différents champs du formulaire (attributs name) 28 form = cgi.fieldstorage() 29 30 if "nom" not in form or "prenom" not in form or "categorie" not in form or "image" not in form or "fichier" not in form: 31 print """ 32 <h1> Formulaire mal rempli!!! </h1> 33 34 Retournez sur <a href="formulaire.py"> la page d inscription </a>. 35 """ 36 else: 37 #on récupère le nom du fichier uploadé et son extension 38 upload_name = form[ fichier ].filename 39 racine_nom,extension = os.path.splitext(upload_name) 40 #si l extension est acceptable on génère la page de bienvenue 41 if extension.lower() in [.png,.jpg,.bmp,.gif,.svg ]: 42 print <p> Bienvenue %s %s.<br/> %(form[ prenom ].value,form[ nom ].value) 43 print Vous êtes un %s.<br/> %form[ categorie ].value 44 print Vous avez envoyé le fichier image %s d\ extension %s. <br/> %( upload_name,extension) 45 #on récupère le contenu du fichier 46 upload_content = form[ fichier ].file.read() 47 #on sauvegarde le fichier sur le serveur Page 5/7

48 #dans un répertoire upload qui est en lecture-écriture pour le serveur ( utilisateur www-data) 49 backup_path = upload/ +racine_nom+ -upload +extension 50 f = open(backup_path, wb ) 51 f.write(upload_content) 52 f.close() 53 print Fichier sauvegardé sur le serveur dans %s. </p> %backup_path 54 print """<p> Image transmise : <br/> 55 <img src= "%s" /> </p>"""%backup_path 56 else: 57 print <p> Les fichiers d\ extension %s ne sont pas acceptés par mesure de sécurité </p> %extension 58 59 print """ 60 </body> 61 </html>""" traitement.py 2.5 Attention à la sécurité Une gestion fine des droits d accès des utilisateurs est nécessaire pour sécuriser le serveur et il ne faut pas oublier que le serveur web ne s exécute pas avec vos droits. Lorsqu on manipule des données issues de formulaires il faut être très méfiant : le code HTML du formulaire est visible de tous et rien n empêche un utilisateur malveillant de fabriquer un faux formulaire pour envoyer des données indésirables. C est pourquoi il faut toujours s assurer que les données reçues sont du type attendu. Par ailleurs, l utilisateur peut insérer des balises HTML dans le texte transmis : dans une balise <script> on peut ainsi injecter du code Javascript malveillant. Pour prévenir ce risque on peut échapper systématiquement les caractères spéciaux HTML dans les textes reçus depuis un formulaire. En Python3 il existe pour celà la fonction html.escape() du module html. Enfin, il faut être vigilant avec les fichiers uploadé sur le serveur. Il ne faut pas accepter des fichiers de script en PHP ou Python car ils pourraient servir à un utilisateur malveillant. 3 Un peu d exercice Exercice 1 Ecrire deux scripts CGI en Python : un formulaire qui demande à l utilisateur de saisir un entier n et de sélectionner un entier p parmi {5,10,20,50} et un script de traitement qui affiche la table des p premiers multiples de n comme ci-dessous. 5 premiers multiples de 11 1 x 11 = 11... Exercice 2 1. Ecrire un script formulaire_passwd.py qui génère une page HTML demandant à l utilisateur de saisir un identifiant et un mot de passe. Page 6/7

2. Ecrire le script de traitement traitement_passwd.py qui traite les données du formulaire précédent : il vérife si l identifiant et le mot de passe sont corrects (on peut choisir ISN comme identifiant et Turing comme mot de passe) ; il ouvre un fichier texte decompte.txt pour récupérer le nombre de visiteurs, il l incrémente et l enregistre dans decompte.txt ; il génère une page HTML avec un affichage adéquat comme ci-dessous Résultat du traitement du formulaire de connexion. Identifiant ou mot de passe incorrect!!! Retournez sur la page de connexion. Résultat du traitement du formulaire de connexion. Bravo, connexion réussie!!! Bienvenue ISN. Vous êtes le 4 ème visiteur de notre site. Page 7/7