app-tswd - tiproftiprof.fr/siteswebdynamic/approblemes-php-mysql/applp-tswd... · et après avoir...

32
APP-TSWD Apprentissage Par Problèmes T echniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen Mahrous Grenoble INP – Pagora 10 novembre 2014 Cours en Réponse à questions, n° 5

Upload: buikien

Post on 12-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

APP-TSWD

Apprentissage Par Problèmes Techniques des Sites Web Dynamiques

Licence Professionnelle FNEPI

Valérie Bellynck, Benjamin Brichet-Billet, Mazen Mahrous Grenoble INP – Pagora

10 novembre 2014

Cours en Réponse à questions, n° 5

Page 2: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Groupe : ? Autres groupes ? •  ?

Profs Qu’est-ce que la programmation orienté objets ? Quelle est la différence entre :: et -> ? Quels risques de piratage peut-on introduire avec des formulaires ? Comment y pallier ? Qu’est-ce qu’une expression régulière ? Comment récupérer la liste des colonnes d’une table mySQL ?

Questions reçues

Page 3: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Les objets dans PHP (4 et 5)

Page 4: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Objet : exemple du point (x,y)

•  2 variables séparées (« scalaires ») : float x, float y; •  Des structures de données :

array(x,y) struct { float x, float y } struct { float x, float y, string nom }

+ des fonctions comme - définir un point - déplacer un point - supprimer un point  Une structure pour des valeurs ET des « méthodes » + héritage

⚠ La structure n’est pas la valeur

➙ Le constructeur réserve la mémoire et initialise

➙ Le destructeur libère la mémoire

➙ Un véhicule est un engin à roues permettant de se déplacer "➙ Une voiture est un véhicule à 4 roues …

struct point {! float x; float y; string nom;!}!var p = (point) (2,3,’A’);!

pas en PHP

Page 5: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Exemple en PHP4

↪ voir http://tiprof.fr/PHP-mySQL/ressources/php/POO-avec-PHP5.html

Page 6: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Manuel PHP : syntaxe de base

↪ voir http://php.net/manual/fr/language.oop5.basic.php

pseudo variable $this est une référence à l’objet appelant

Définition de la classe

Instanciation d’un objet de la classe

Exploitation d’une méthode de l’objet

Page 7: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Manuel PHP : syntaxe de base

↪ voir http://php.net/manual/fr/language.oop5.basic.php

Page 8: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Utiliser directement un objet Pour définir un type d’objet, on doit créer une fonction pour le type d’objet

Exemple javascript

↪ voir https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Utiliser_les_objets

Page 9: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

•  Ne pas avoir besoin de passer tous les arguments en paramètre des fonctions, puisque certains sont des propriétés de l’objet contexte

Autres qualités de la programmation objet

↪ voir http://tiprof.fr/PHP-mySQL/ressources/php/POO-avec-PHP5.html Et http://www.phpdebutant.org/article42.php

Page 10: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

mysqli : procédural ET orienté objet

↪ voir http://php.net/manual/fr/mysqli.quickstart.dual-interface.php

Page 11: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Portée d’une variable

↪ voir

Page 12: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Exemple PHP5

↪ voir

Page 13: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Sécurité

Page 14: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Injection MySQL : le risque

Le code suivant : va envoyer au serveur MySQL la requête :

 il faut « échapper » les quotes :

$user='moi';$password="' OR ''='"; $query = "SELECT * FROM users ! WHERE user='$user' AND password='$password'"; mysql_query($query);!

SELECT * FROM users WHERE user='moi' AND password='' OR ''=''!

↪ voir http://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ Etape 5 et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password) );!

Page 15: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

 Il faut « échapper » les quotes : Mais la configuration du serveur lui dit peut-être déjà de le faire systématiquement Alors il ne faut pas toujours le faire faire en plus par les scripts PHP encapsuler dans une fonction

Injection MySQL : protection

↪ voir http://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/

Page 16: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Lorsque les pages affichent des contenus introduits pas les visiteurs, comme des commentaires, affichés lorsque la page est visitée par les suivants Le principal risque est que le code à afficher contienne du javascript, qui sera alors exécuté «sur le client », et pourra afficher un encart issu d’un autre site ou modifier les valeurs identifiant la session  Quelles balises permettent d’exécuter du javascript ? <script language="javascript" … <a href="javascript:alert('coucou')"> <img onload=“alert('coucou')” /> et tous les événements réactifs aux images <iframe oncload=“alert('coucou')"> ... aux encarts … refuser les contenus qui contiennent des balises « à risque » directement sur le client en Javascript ou sur le serveur en PHP

Valeurs affichées en HTML => insertion de pub / vol de session

↪ voir http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/

Page 17: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

 Comment refuser les contenus qui contiennent des balises « à risque » ?

 But : identifier toutes les chaînes de caractères qui contiennent un « motif »

Par exemple ===> repérer <a … > … </a> dans la chaîne de caractères : Défauts : •  les calculs sont couteux s’il est possible de « faire plus simple », le faire

Par exemple, en PHP utiliser trim() pour enlever les blancs en début et fin de chaîne

•  il y a des écarts entre les implémentations des fonctions pour traiter les RegEx dans les différents langages

et des erreurs dans les implémentations courantes ( = décallages entre les résultats et la théorie)

Valeurs affichées en HTML : protection expressions régulières

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/ http://www.regular-expressions.info/javascriptexample.html et http://www.expreg.com/ et aussi http://lumadis.be/regex/tuto_pcre.php (utilisateurs avancés)

le texte <a href="javascript:alert('coucou')">ce lien</a> n’est pas dangereux

Page 18: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

 But : repérer <img … /> dans la chaîne de caractères :

Expressions régulières : exemple de la balise <img>

le texte <img src="avartar.gif" onload="alert('coucou')" /> n’est pas dangereux

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/

Page 19: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

 But : repérer <a … > … </a> dans la chaîne de caractères :

Expressions régulières : exemple de la balise <a>

le texte <a href="javascript:alert('coucou')">ce lien</a> n’est pas dangereux

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/

Page 20: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

 Comment faire en PHP ?

2 bibliothèques : • PCRE exécutent des codes d’un autre langages : PERL plusieurs fonctions dont le nom commence par preg_...()! • POSIX plus lent que PRCE plusieurs fonctions dont le nom commence par ereg_...() ou split...() preg_match( $regexp, $subject, $matches ) preg_match_all( $regexp, $subject, $matches ) preg_replace($regexp, $remplacement, $subject)

$regexp est la chaîne qui définit le motif à retrouver

Expressions régulières : par des fonctions PHP

↪ voir http://www.expreg.com/presentation.php et http://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2

après avoir trouvé le premier résultat, la recherche continue jusqu’à la fin de la chaîne

analyse la chaîne jusqu’à avoir trouvé le motif

après avoir trouver la ou les chaînes, remplace des parties par un correspondant

Page 21: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

 But : repérer <a … > … </a> dans la chaîne de caractères :

code PHP :

Expressions régulières : un exemple en PHP

le texte <a href="javascript:alert('coucou')">ce lien</a> n’est pas dangereux

↪ voir http://tiprof.fr/Essais-php-js/reg-exp/

Page 22: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Expressions régulières : exemple avec preg_match() preg_match()

analyse la chaîne jusqu’à avoir trouvé le motif

Page 23: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Expressions régulières : exemple avec preg_match_all()

preg_match_all() après avoir trouvé le premier résultat, la recherche continue jusqu’à la fin de la chaîne

Page 24: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Expressions régulières : exemple avec preg_match_replace()

preg_match_replace() après avoir trouver la ou les chaînes, remplace des parties par un correspondant

Page 25: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

En plus des quotes ("", ’’) qui sont nécessaires pour le langage de script, la chaîne qui définit le motif doit être délimitée par un caractère identique, comme / ou #, et peut être suivie par une option

Par exemple : #<a(.*)>(.*)</a>#! /(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/!

Des options sont spécifiables : Par exemple : /(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/!

Expressions régulières : délimiteurs

↪ voir http://www.expreg.com/options.php et http://fr.wikipedia.org/wiki/Expression_rationnelle

i PCRE_CASELESS insensible à la casse u PCRE_UTF8 Les chaînes sont traitées en UTF-8 E PCRE_DOLLAR_ENDONLY Le caractère $ ne sera « réservé » que

pour la fin de chaîne (sinon, $ correspond aussi aux fins de ligne)

Page 26: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Expressions régulières : symboles

↪ voir http://www.expreg.com/symbole.php Et http://fr.wikipedia.org/wiki/Expression_rationnelle

^ Indique le début de la chaîne - exemple ^chat reconnaît une ligne qui commence par chat

$ Indique la fin de la chaîne - exemple : chat$ reconnaît une ligne qui finit par chat

. Le point indique n'importe quel caractère

* Indique 0, 1 ou plusieurs occurrences du caractère ou de la classe précédente

+ Indique une ou plusieurs occurrences du caractère ou de la classe précédente

? Indique 0 ou une occurrence du caractère ou de la classe précédente

[ ] [0-9] br[iu]n

Délimiteur de classe : tous les caractères énumérés dans la classe - exemple : tous les caractères entre 0 et 9 - exemple : i ou u => trouve brun et brin

- | ^ Dans [ ] : - pour de … à …, | pour l’alternative , ^sauf le caractère qui suit

Page 27: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Expressions régulières : caractères spéciaux (blancs, etc.)

↪ voir http://www.expreg.com/symbole.php Et http://fr.wikipedia.org/wiki/Expression_rationnelle

\n Indique le caractère qui code la « nouvelle ligne »

\r Indique le caractère qui code le « retour chariot »

^ Indique le début de la chaîne - exemple ^chat reconnaît une ligne qui commence par chat

$ Indique la fin de la chaîne - exemple : chat$ reconnaît une ligne qui finit par chat

\b Indique une limite de mot dans une chaîne

\d Indique un chiffre (caractère entre 0 et 9, donc identifque à [0-9] et [[:digit:]])

\D Indique la classe [^0-9], c’est-à-dire, qui n’est pas un chiffre

\s Indique un espace blanc \t, \r, \n, \f

\w Indique un mot ( correspond à [0-9a_zA-Z] )

Page 28: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

•  chat|chien : correspond aux chaînes de caractères « chat » ou « chien » (et seulement à celles-ci), n'importe où dans le texte (exemple : « chatte »).

•  [cC]hat|[cC]hien : correspond aux chaînes « chat », « Chat », « chien » ou « Chien » (et seulement à celles-ci), n'importe où dans le texte (exemple : « Chat » dans « Chats et chiens »).

•  chu+t : correspond à « chut », « chuut », « chuuut », etc., n’importe où dans le texte.

•  a[ou]+ : correspond à « aou », « ao », « auuu », « aououuuoou », etc., n’importe où dans le texte.

•  peu[xt]? : correspond à « peu », « peux » et « peut » (et seulement à ces chaînes , n’importe où dans le texte. La recherche retourne le texte le plus long possible en cas d’occurrences multiples à la même position).

•  ^[st]ac : représente les chaînes « sac » et « tac » en début de ligne. •  [st]ac$ : représente les chaînes « sac » et « tac »

en fin de ligne ou de texte (par exemple à l'intérieur de « ressac »). •  ^trax$ : représente la chaîne « trax » seule sur une ligne.

Expressions régulières : exemples de $regex

↪ voir http://fr.wikipedia.org/wiki/Expression_rationnelle

Page 29: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Exemple : pour récupérer les valeurs définies pour le type ENUM!!

Expressions régulières : en mySQL

↪ voir http://dev.mysql.com/doc/refman/5.0/en/columns-table.html et http://dev.mysql.com/doc/refman/5.7/en/regexp.html 1 = TRUE ; 0 = FALSE

Page 30: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Exemple : pour rechercher des valeurs erronées dans une table, comme des textes qui qui contiennent une balise <img … /> dans une colonne « nom »!!

Expressions régulières : en mySQL

↪ voir http://dev.mysql.com/doc/refman/5.0/en/columns-table.html et http://dev.mysql.com/doc/refman/5.7/en/regexp.html

Page 31: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

Références

Page 32: APP-TSWD - tiproftiprof.fr/SitesWebDynamic/ApProblemes-PHP-mySQL/APPLP-tSWD... · et  après avoir trouvé le premier résultat,

QCM inspiré des questions des fiches de TD de tiprof http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD3-PHP-mySQL/ http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/ http://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html