Download presentation
Presentation is loading. Please wait.
Published byCorentin Normandin Modified over 8 years ago
1
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
2
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
3
Les objets dans PHP (4 et 5)
4
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
5
Manuel PHP : syntaxe de base ↪ voir http://php.net/manual/fr/language.oop5.basic.phphttp://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
6
Exemple : classe Personne et instances de la classe Personne Manuel PHP : syntaxe de base ↪ voir http://php.net/manual/fr/language.oop5.basic.phphttp://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
7
Manuel PHP : syntaxe de base ↪ voir http://php.net/manual/fr/language.oop5.basic.phphttp://php.net/manual/fr/language.oop5.basic.php
8
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_objetshttps://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Utiliser_les_objets
9
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.htmlhttp://tiprof.fr/PHP-mySQL/ressources/php/POO-avec-PHP5.html Et http://www.phpdebutant.org/article42.phphttp://www.phpdebutant.org/article42.php
10
mysqli : procédural ET orienté objet ↪ voir http://php.net/manual/fr/mysqli.quickstart.dual-interface.phphttp://php.net/manual/fr/mysqli.quickstart.dual-interface.php
11
Portée d’une variable ↪ voir
12
Exemple PHP5 ↪ voir
13
Exemple en PHP4 ↪ voir http://tiprof.fr/PHP-mySQL/ressources/php/POO-avec-PHP5.htmlhttp://tiprof.fr/PHP-mySQL/ressources/php/POO-avec-PHP5.html
14
Sécurité
15
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.htmlhttp://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ Etape 5http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/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) );
16
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.htmlhttp://tiprof.fr/PHP-mySQL/ressources/mysql/Resume_RequetesMySQL-et-PHP.html et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/
17
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" … et tous les événements réactifs aux images... 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/http://www.tiprof.fr/SitesWebDynamic/Techniques-swd/mat%C3%A9riel/pageauto/ et http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/http://tiprof.fr/PHP-mySQL/Travaux%20Dirig%C3%A9s/TD4-Deploie/
18
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 … 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://tiprof.fr/Essais-php-js/reg-exp/ http://www.regular-expressions.info/javascriptexample.html et http://www.expreg.com/http://www.expreg.com/ et aussi http://lumadis.be/regex/tuto_pcre.php (utilisateurs avancés)http://lumadis.be/regex/tuto_pcre.php le texte ce lien n’est pas dangereux
19
But : repérer dans la chaîne de caractères : Expressions régulières : exemple de la balise le texte n’est pas dangereux ↪ voir http://tiprof.fr/Essais-php-js/reg-exp/http://tiprof.fr/Essais-php-js/reg-exp/
20
But : repérer … dans la chaîne de caractères : Expressions régulières : exemple de la balise le texte ce lien n’est pas dangereux ↪ voir http://tiprof.fr/Essais-php-js/reg-exp/http://tiprof.fr/Essais-php-js/reg-exp/
21
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.phphttp://www.expreg.com/presentation.php et http://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2http://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
22
But : repérer … dans la chaîne de caractères : code PHP : Expressions régulières : un exemple en PHP le texte ce lien n’est pas dangereux ↪ voir http://tiprof.fr/Essais-php-js/reg-exp/http://tiprof.fr/Essais-php-js/reg-exp/
23
Expressions régulières : exemple avec preg_match() preg_match() analyse la chaîne jusqu’à avoir trouvé le motif
24
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
25
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
26
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 : # (.*) # /( ]*>)(.*?)( )/ Des options sont spécifiables : Par exemple : /( ]*>)(.*?)( )/ Expressions régulières : délimiteurs ↪ voir http://www.expreg.com/options.phphttp://www.expreg.com/options.php et http://fr.wikipedia.org/wiki/Expression_rationnellehttp://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)
27
Expressions régulières : symboles ↪ voir http://www.expreg.com/symbole.phphttp://www.expreg.com/symbole.php Et http://fr.wikipedia.org/wiki/Expression_rationnellehttp://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
28
Expressions régulières : caractères spéciaux (blancs, etc.) ↪ voir http://www.expreg.com/symbole.phphttp://www.expreg.com/symbole.php Et http://fr.wikipedia.org/wiki/Expression_rationnellehttp://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] )
29
chat|chien : correspond aux chaînes de caractères « chat » ou « chien » (et seulement à celles-ci), n'importe où dans le texte (exemple : « chat te »). [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 « Chat s et chien s »). 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_rationnellehttp://fr.wikipedia.org/wiki/Expression_rationnelle
30
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.htmlhttp://dev.mysql.com/doc/refman/5.0/en/columns-table.html et http://dev.mysql.com/doc/refman/5.7/en/regexp.htmlhttp://dev.mysql.com/doc/refman/5.7/en/regexp.html 1 = TRUE ; 0 = FALSE
31
Exemple : pour rechercher des valeurs erronées dans une table, comme des textes qui qui contiennent une balise dans une colonne « nom » Expressions régulières : en mySQL ↪ voir http://dev.mysql.com/doc/refman/5.0/en/columns-table.htmlhttp://dev.mysql.com/doc/refman/5.0/en/columns-table.html et http://dev.mysql.com/doc/refman/5.7/en/regexp.htmlhttp://dev.mysql.com/doc/refman/5.7/en/regexp.html
32
Références
33
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 https://regex101.com/
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.