SlideShare une entreprise Scribd logo
Cours PHP/MySQL
5éme partie
Séance précédente
• Projet: Listing des produits
• Projet: Listing de produits par catégorie
• Projet: Ajout de produits au panier
• Projet: Retirer des produits depuis le panier
• Les concepts fondamentaux de la programmation
orientée objet
• La programmation orientée objet en PHP
• Les exceptions
• Les fichiers
• Projet: Utilisation des concepts orientés objet
Séance d'aujourd'hui
• Projet: Passer la commande
• Sécuriser une application PHP/MySQL
• Projet: Sécuriser notre site e-commerce
• Architecture MVC
• Projet: Adoption de l'architecture MVC
• Simulation d’entretien technique PHP / MySQL
Projet: Passer la commande
4
Sécuriser une application PHP/MySQL
5
Quoi sécuriser ?
• Dans un code php il faut sécuriser les données
entrantes et sortantes:
• Données entrantes: Depuis un formulaire
(injection SQL)
• Données sortantes: Affichages depuis la base de
données (injection HTML, XSS)
6
Injection SQL
7
<?php
$requete = "SELECT * FROM user WHERE email = ' " . $_GET['email'] . " '
AND password = ' " . $_GET['password'] . " ' ";
?>
<?php $_GET['password'] = " ' OR 1 = '1 "; ?>
<?php
$requete = "SELECT * FROM user WHERE email = ' " . $_GET['email'] . " '
AND password = ' ' OR 1 = '1' ";
?>
Injection SQL: suppression
8
<?php
$requete = "DELETE FROM user WHERE id = ' " . $_GET['id'] . " ' ";
?>
<?php $_GET['id'] = "1 ' OR id > '0 "; ?>
<?php
$requete = "DELETE FROM user WHERE id = '1' OR id > '0' ";
?>
Injection SQL: Utilisation des caractères % et _
9
<?php
$requete = "SELECT * FROM user WHERE email LIKE ' " . $_GET['email'] .
" ' ";
?>
<?php $_GET['email'] = "a%"; ?>
<?php
$requete = "SELECT * FROM user WHERE email LIKE 'a%' ";
?>
Injection SQL: Solution !
10
Une fonction très pratique pour empêcher les injections
SQL est mysql_real_escape_string()
Cette fonction échappe les caractères suivants:
les guillemets simples '
les guillemets doubles "
les slashes /
les caractères NULL
En gros, elle neutralise tous les caractères susceptibles
d'être à l'origine d'une injection SQL
Injection SQL: Solution !
11
Exemple d’utilisation de la fonction
mysql_real_escape_string()
<?php
$email = mysql_real_escape_string($_POST['email']);
$requete = "SELECT * FROM user WHERE email = '$email' ";
?>
Injection SQL: Solution !
12
Exemple d’utilisation de la fonction addcslashes()
<?php
$chaine = "%salut_";
// Échappement des caractères % et _
$chaine = addcslashes($chaine, '%_');
echo $chaine; // Affiche %salut_
?>
Injection SQL: Solution finale!
13
<?php
function secureInput($string)
{
// On regarde si le type de string est un nombre entier (int)
if (ctype_digit($string))
{
$string = intval($string);
}
else
{
$string = mysql_real_escape_string($string);
$string = addcslashes($string, '%_');
}
return $string;
}
?>
Injections HTML ou XSS
14
<html>
<head>
<title>Injection HTML</title>
</head>
<body>
<?php echo "Salut, tu t'appelles ".$_GET['pseudo']; ?>
</body>
</html>
http://mon_url/index.php?pseudo=<i>zaki</i>
http://mon_url/index.php?pseudo=<i>zaki</i>
<script src="http://sitepirate.com/injection.js" >
Injections HTML ou XSS: Solution !
15
<html>
<head>
<title>Injection HTML</title>
</head>
<body>
<?php echo "Salut, tu t'appelles ".htmlentities($_GET['pseudo']); ?>
</body>
</html>
http://mon_url/index.php?pseudo=<i>zaki</i>
http://mon_url/index.php?pseudo=<i>zaki</i>
<script src="http://sitepirate.com/injection.js" >
Projet: Sécuriser notre site e-
commerce
16
Architecture MVC
17
MVC c’est quoi ?
18
Le pattern MVC signifie Modèle - Vue - Contrôleur, il permet de bien organiser le
code source, son but est de séparer la logique du code en trois parties que l'on
retrouve dans des fichiers distincts.
Cette fonction échappe les caractères suivants:
Modèle : cette partie gère les données de votre site, son rôle est d'aller récupérer
les informations « brutes » dans la base de données, de les organiser et de les
assembler pour qu'elles puissent ensuite être traitées par le contrôleur, on y
trouve donc les requêtes SQL.
Vue : cette partie se concentre sur l'affichage, elle ne fait presque aucun calcul et
se contente de récupérer des variables pour savoir ce qu'elle doit afficher, on y
trouve essentiellement du code HTML mais aussi quelques boucles et conditions
PHP très simples.
Contrôleur : cette partie gère la logique du code qui prend des décisions, c'est en
quelque sorte l'intermédiaire entre le modèle et la vue : le contrôleur va demander
au modèle les données, les analyser, prendre des décisions et renvoyer le texte à
afficher à la vue, le contrôleur contient exclusivement du PHP.
MVC: principe de fonctionnement
19
Projet: Adoption de l'architecture
MVC
20
Simulation d’entretien technique
PHP / MySQL
21
Questions entretiens PHP / MySQL
22
Quelle fonction retourne le nombre de secondes
écoulées depuis le 1er janvier 1970 ?
1. time
2. timestamp
3. mktime
4. microtime
Questions entretiens PHP / MySQL
23
Quelle fonction retourne le nombre de secondes
écoulées depuis le 1er janvier 1970 ?
1. time
2. timestamp
3. mktime
4. microtime
Questions entretiens PHP / MySQL
24
Dans quel tableau de données retrouve-t-on les
cookies du visiteur ?
1. $SETCOOKIE
2. $COOKIES
3. $_COOKIE
Questions entretiens PHP / MySQL
25
Dans quel tableau de données retrouve-t-on les
cookies du visiteur ?
1. $SETCOOKIE
2. $COOKIES
3. $_COOKIE
Questions entretiens PHP / MySQL
26
Quelle fonction permet de lire le résultat d'une
ressources MySQL renvoyée par mysql_query() ?
1. mysql_fetch_row()
2. mysql_data_seek()
3. mysql_affected_rows()
Questions entretiens PHP / MySQL
27
Quelle fonction permet de lire le résultat d'une
ressources MySQL renvoyée par mysql_query() ?
1. mysql_fetch_row()
2. mysql_data_seek()
3. mysql_affected_rows()
Questions entretiens PHP / MySQL
28
Comment peut-on trier un tableau en ordre inverse ?
1. $tableau = ksort($tableau);
2. rsort($tableau);
Questions entretiens PHP / MySQL
29
Comment peut-on trier un tableau en ordre inverse ?
1. $tableau = ksort($tableau);
2. rsort($tableau);
Questions entretiens PHP / MySQL
30
Comment définit-on une constante ?
1. set('inconnue' = 'parfaite');
2. define("inconnue","parfaite");
3. const $inconnue = parfaite;
Questions entretiens PHP / MySQL
31
Comment définit-on une constante ?
1. set('inconnue' = 'parfaite');
2. define("inconnue","parfaite");
3. const $inconnue = parfaite;
Questions entretiens PHP / MySQL
32
On évalue le code suivant:
$kiwi = 'vert';
$fruit = &$kiwi;
$fruit = array();
$fruit['kiwi'] = $kiwi;
Que contient $fruit ?
1. Rien
2. wiki
3. vert
4. La variable n'est pas définie.
Questions entretiens PHP / MySQL
33
On évalue le code suivant:
$kiwi = 'vert';
$fruit = &$kiwi;
$fruit = array();
$fruit['kiwi'] = $kiwi;
Que contient $fruit ?
1. Rien
2. wiki
3. vert
4. La variable n'est pas définie.
Questions entretiens PHP / MySQL
34
Ma page index.php contient le code suivant:
$a = 'a'.file_exists(__FILE__);
$a1 = 'wiki';
$a2 = 'kiwi';
echo ${$a};
Qu'est-ce qui s'affiche si on y accède ?
1. Une page blanche.
2. kiwi.
3. wiki
4. Une erreur PHP.
5. Aucune des solutions précédentes
Questions entretiens PHP / MySQL
35
Ma page index.php contient le code suivant:
$a = 'a'.file_exists(__FILE__);
$a1 = 'wiki';
$a2 = 'kiwi';
echo ${$a};
Qu'est-ce qui s'affiche si on y accède ?
1. Une page blanche.
2. kiwi.
3. wiki
4. Une erreur PHP.
5. Aucune des solutions précédentes
Questions entretiens PHP / MySQL
36
Comment forcer l'arrêt d'un script ?
Comment inclure un script à l'intérieur d'un autre ?
Comment faire une redirection ?
Comment conserver des variables de page en page ?
Peut-on modifier une constante ?
Comment déclarer une classe en PHP 5 ?
Comment faire de l'héritage en PHP 5 ?
Est-il possible de faire de l'héritage multiple en PHP ?
Comment initialiser les arguments d'une fonction par
défaut ?
Le code PHP est-il visible pour tous ?
Comment concaténer des chaînes des caractères ?
Quelle est la différence entre l’envoi de données en
POST et en GET ?
Quelle est la différence entre include et require ?

Contenu connexe

ODP
Formation PHP avancé - Cake PHP
PDF
Cours php & Mysql - 3éme partie
PDF
Un exemple élémentaire d'application MVC en PHP
PDF
Cours php & Mysql - 4éme partie
PDF
Cours php & Mysql - 2éme partie
PDF
Php 2 - Approfondissement MySQL, PDO et MVC
PPTX
Php & My Sql
DOCX
Mini projet individuel php
Formation PHP avancé - Cake PHP
Cours php & Mysql - 3éme partie
Un exemple élémentaire d'application MVC en PHP
Cours php & Mysql - 4éme partie
Cours php & Mysql - 2éme partie
Php 2 - Approfondissement MySQL, PDO et MVC
Php & My Sql
Mini projet individuel php

Tendances (19)

PPT
Php mysql cours
 
PDF
Application web php5 html5 css3 bootstrap
PDF
Cours php & Mysql - 1ére partie
PPTX
php2 : formulaire-session-PDO
PDF
Utilisation optimale et professionnelle de PHP
PPTX
Introduction à React
PDF
Examen principal- php - correction
PDF
Support programmation orientée objet c# .net version f8
PDF
Javascript
PPT
Soutenance Zend Framework vs Symfony
PDF
Programmation orientée objet en PHP 5
PPT
Php4 Mysql
PDF
Cours design pattern m youssfi partie 7 facade bridge flyweight
PDF
Cours JavaScript
PDF
Trucs et astuces PHP et MySQL
PDF
Support programmation orientée aspect mohamed youssfi (aop)
PDF
Cours javascript
PPTX
Introduction à Laravel
PDF
Cours design pattern m youssfi partie 6 proxy
Php mysql cours
 
Application web php5 html5 css3 bootstrap
Cours php & Mysql - 1ére partie
php2 : formulaire-session-PDO
Utilisation optimale et professionnelle de PHP
Introduction à React
Examen principal- php - correction
Support programmation orientée objet c# .net version f8
Javascript
Soutenance Zend Framework vs Symfony
Programmation orientée objet en PHP 5
Php4 Mysql
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours JavaScript
Trucs et astuces PHP et MySQL
Support programmation orientée aspect mohamed youssfi (aop)
Cours javascript
Introduction à Laravel
Cours design pattern m youssfi partie 6 proxy
Publicité

En vedette (20)

PDF
Bonnes pratiques de developpement en PHP
PDF
Introduction à la sécurité des applications web avec php [fr]
PDF
CReVote: un système de vote électronique résistant à la coercition basé sur l...
PPT
Introduction a la SOA
PPTX
Célèbres pannes du génie logiciel
DOCX
Gidsy.com
PDF
Notions de base de JavaScript
PDF
Conception et développement d&rsquo;une place de marché B2C
PPTX
LESS, Le CSS avancé
PPTX
DataWerhouse : Données de qualité
PPTX
Graph and RDF databases
PDF
PDF
Methodes agile
PPTX
Overview of c++ language
PDF
Conférence big data
PPTX
Modèle en cascade
PDF
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
PPTX
HTML5 & CSS3
PDF
Les Web Services en 60 diapos chrono !
Bonnes pratiques de developpement en PHP
Introduction à la sécurité des applications web avec php [fr]
CReVote: un système de vote électronique résistant à la coercition basé sur l...
Introduction a la SOA
Célèbres pannes du génie logiciel
Gidsy.com
Notions de base de JavaScript
Conception et développement d&rsquo;une place de marché B2C
LESS, Le CSS avancé
DataWerhouse : Données de qualité
Graph and RDF databases
Methodes agile
Overview of c++ language
Conférence big data
Modèle en cascade
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
HTML5 & CSS3
Les Web Services en 60 diapos chrono !
Publicité

Similaire à Cours php & Mysql - 5éme partie (20)

PDF
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
DOCX
test doc
PPT
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PDF
De legacy à symfony
DOCX
démonstration code source site web ecole.docx
PDF
Comment relire du code pourri sans se fatiguer
PDF
Mpdf 9
PDF
cours.symfony.web2pouringenieurseninformatique
PDF
Quelle place pour le framework Rails dans le développement d'application web
PDF
javaScript(1)-2023-2024-Partie1-Mechid (1).pdf
PPTX
Formation cakephp
PDF
Qualité logicielle
PDF
Introduction à Angularjs
PPTX
Symfony2 - Un Framework PHP 5 Performant
PPTX
pro_Langage_PHP_LES_FONCTIONALITES_AVANCEES__L2_ DAWN & ASRS.pptx
PPTX
ASP.NET MVC, Web API & KnockoutJS
KEY
Securitedesapplications 091011120426-phpapp02
PPTX
La première partie de la présentation PHP
PPTX
ASP.NET MVC 5 et Web API 2
PPTX
SOLID : les principes à l’origine du succès de Symfony et de vos applications
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
test doc
PHP_partie_.ppt,php_cours_mathematiques_informatiques
De legacy à symfony
démonstration code source site web ecole.docx
Comment relire du code pourri sans se fatiguer
Mpdf 9
cours.symfony.web2pouringenieurseninformatique
Quelle place pour le framework Rails dans le développement d'application web
javaScript(1)-2023-2024-Partie1-Mechid (1).pdf
Formation cakephp
Qualité logicielle
Introduction à Angularjs
Symfony2 - Un Framework PHP 5 Performant
pro_Langage_PHP_LES_FONCTIONALITES_AVANCEES__L2_ DAWN & ASRS.pptx
ASP.NET MVC, Web API & KnockoutJS
Securitedesapplications 091011120426-phpapp02
La première partie de la présentation PHP
ASP.NET MVC 5 et Web API 2
SOLID : les principes à l’origine du succès de Symfony et de vos applications

Cours php & Mysql - 5éme partie

  • 2. Séance précédente • Projet: Listing des produits • Projet: Listing de produits par catégorie • Projet: Ajout de produits au panier • Projet: Retirer des produits depuis le panier • Les concepts fondamentaux de la programmation orientée objet • La programmation orientée objet en PHP • Les exceptions • Les fichiers • Projet: Utilisation des concepts orientés objet
  • 3. Séance d'aujourd'hui • Projet: Passer la commande • Sécuriser une application PHP/MySQL • Projet: Sécuriser notre site e-commerce • Architecture MVC • Projet: Adoption de l'architecture MVC • Simulation d’entretien technique PHP / MySQL
  • 4. Projet: Passer la commande 4
  • 6. Quoi sécuriser ? • Dans un code php il faut sécuriser les données entrantes et sortantes: • Données entrantes: Depuis un formulaire (injection SQL) • Données sortantes: Affichages depuis la base de données (injection HTML, XSS) 6
  • 7. Injection SQL 7 <?php $requete = "SELECT * FROM user WHERE email = ' " . $_GET['email'] . " ' AND password = ' " . $_GET['password'] . " ' "; ?> <?php $_GET['password'] = " ' OR 1 = '1 "; ?> <?php $requete = "SELECT * FROM user WHERE email = ' " . $_GET['email'] . " ' AND password = ' ' OR 1 = '1' "; ?>
  • 8. Injection SQL: suppression 8 <?php $requete = "DELETE FROM user WHERE id = ' " . $_GET['id'] . " ' "; ?> <?php $_GET['id'] = "1 ' OR id > '0 "; ?> <?php $requete = "DELETE FROM user WHERE id = '1' OR id > '0' "; ?>
  • 9. Injection SQL: Utilisation des caractères % et _ 9 <?php $requete = "SELECT * FROM user WHERE email LIKE ' " . $_GET['email'] . " ' "; ?> <?php $_GET['email'] = "a%"; ?> <?php $requete = "SELECT * FROM user WHERE email LIKE 'a%' "; ?>
  • 10. Injection SQL: Solution ! 10 Une fonction très pratique pour empêcher les injections SQL est mysql_real_escape_string() Cette fonction échappe les caractères suivants: les guillemets simples ' les guillemets doubles " les slashes / les caractères NULL En gros, elle neutralise tous les caractères susceptibles d'être à l'origine d'une injection SQL
  • 11. Injection SQL: Solution ! 11 Exemple d’utilisation de la fonction mysql_real_escape_string() <?php $email = mysql_real_escape_string($_POST['email']); $requete = "SELECT * FROM user WHERE email = '$email' "; ?>
  • 12. Injection SQL: Solution ! 12 Exemple d’utilisation de la fonction addcslashes() <?php $chaine = "%salut_"; // Échappement des caractères % et _ $chaine = addcslashes($chaine, '%_'); echo $chaine; // Affiche %salut_ ?>
  • 13. Injection SQL: Solution finale! 13 <?php function secureInput($string) { // On regarde si le type de string est un nombre entier (int) if (ctype_digit($string)) { $string = intval($string); } else { $string = mysql_real_escape_string($string); $string = addcslashes($string, '%_'); } return $string; } ?>
  • 14. Injections HTML ou XSS 14 <html> <head> <title>Injection HTML</title> </head> <body> <?php echo "Salut, tu t'appelles ".$_GET['pseudo']; ?> </body> </html> http://mon_url/index.php?pseudo=<i>zaki</i> http://mon_url/index.php?pseudo=<i>zaki</i> <script src="http://sitepirate.com/injection.js" >
  • 15. Injections HTML ou XSS: Solution ! 15 <html> <head> <title>Injection HTML</title> </head> <body> <?php echo "Salut, tu t'appelles ".htmlentities($_GET['pseudo']); ?> </body> </html> http://mon_url/index.php?pseudo=<i>zaki</i> http://mon_url/index.php?pseudo=<i>zaki</i> <script src="http://sitepirate.com/injection.js" >
  • 16. Projet: Sécuriser notre site e- commerce 16
  • 18. MVC c’est quoi ? 18 Le pattern MVC signifie Modèle - Vue - Contrôleur, il permet de bien organiser le code source, son but est de séparer la logique du code en trois parties que l'on retrouve dans des fichiers distincts. Cette fonction échappe les caractères suivants: Modèle : cette partie gère les données de votre site, son rôle est d'aller récupérer les informations « brutes » dans la base de données, de les organiser et de les assembler pour qu'elles puissent ensuite être traitées par le contrôleur, on y trouve donc les requêtes SQL. Vue : cette partie se concentre sur l'affichage, elle ne fait presque aucun calcul et se contente de récupérer des variables pour savoir ce qu'elle doit afficher, on y trouve essentiellement du code HTML mais aussi quelques boucles et conditions PHP très simples. Contrôleur : cette partie gère la logique du code qui prend des décisions, c'est en quelque sorte l'intermédiaire entre le modèle et la vue : le contrôleur va demander au modèle les données, les analyser, prendre des décisions et renvoyer le texte à afficher à la vue, le contrôleur contient exclusivement du PHP.
  • 19. MVC: principe de fonctionnement 19
  • 20. Projet: Adoption de l'architecture MVC 20
  • 22. Questions entretiens PHP / MySQL 22 Quelle fonction retourne le nombre de secondes écoulées depuis le 1er janvier 1970 ? 1. time 2. timestamp 3. mktime 4. microtime
  • 23. Questions entretiens PHP / MySQL 23 Quelle fonction retourne le nombre de secondes écoulées depuis le 1er janvier 1970 ? 1. time 2. timestamp 3. mktime 4. microtime
  • 24. Questions entretiens PHP / MySQL 24 Dans quel tableau de données retrouve-t-on les cookies du visiteur ? 1. $SETCOOKIE 2. $COOKIES 3. $_COOKIE
  • 25. Questions entretiens PHP / MySQL 25 Dans quel tableau de données retrouve-t-on les cookies du visiteur ? 1. $SETCOOKIE 2. $COOKIES 3. $_COOKIE
  • 26. Questions entretiens PHP / MySQL 26 Quelle fonction permet de lire le résultat d'une ressources MySQL renvoyée par mysql_query() ? 1. mysql_fetch_row() 2. mysql_data_seek() 3. mysql_affected_rows()
  • 27. Questions entretiens PHP / MySQL 27 Quelle fonction permet de lire le résultat d'une ressources MySQL renvoyée par mysql_query() ? 1. mysql_fetch_row() 2. mysql_data_seek() 3. mysql_affected_rows()
  • 28. Questions entretiens PHP / MySQL 28 Comment peut-on trier un tableau en ordre inverse ? 1. $tableau = ksort($tableau); 2. rsort($tableau);
  • 29. Questions entretiens PHP / MySQL 29 Comment peut-on trier un tableau en ordre inverse ? 1. $tableau = ksort($tableau); 2. rsort($tableau);
  • 30. Questions entretiens PHP / MySQL 30 Comment définit-on une constante ? 1. set('inconnue' = 'parfaite'); 2. define("inconnue","parfaite"); 3. const $inconnue = parfaite;
  • 31. Questions entretiens PHP / MySQL 31 Comment définit-on une constante ? 1. set('inconnue' = 'parfaite'); 2. define("inconnue","parfaite"); 3. const $inconnue = parfaite;
  • 32. Questions entretiens PHP / MySQL 32 On évalue le code suivant: $kiwi = 'vert'; $fruit = &$kiwi; $fruit = array(); $fruit['kiwi'] = $kiwi; Que contient $fruit ? 1. Rien 2. wiki 3. vert 4. La variable n'est pas définie.
  • 33. Questions entretiens PHP / MySQL 33 On évalue le code suivant: $kiwi = 'vert'; $fruit = &$kiwi; $fruit = array(); $fruit['kiwi'] = $kiwi; Que contient $fruit ? 1. Rien 2. wiki 3. vert 4. La variable n'est pas définie.
  • 34. Questions entretiens PHP / MySQL 34 Ma page index.php contient le code suivant: $a = 'a'.file_exists(__FILE__); $a1 = 'wiki'; $a2 = 'kiwi'; echo ${$a}; Qu'est-ce qui s'affiche si on y accède ? 1. Une page blanche. 2. kiwi. 3. wiki 4. Une erreur PHP. 5. Aucune des solutions précédentes
  • 35. Questions entretiens PHP / MySQL 35 Ma page index.php contient le code suivant: $a = 'a'.file_exists(__FILE__); $a1 = 'wiki'; $a2 = 'kiwi'; echo ${$a}; Qu'est-ce qui s'affiche si on y accède ? 1. Une page blanche. 2. kiwi. 3. wiki 4. Une erreur PHP. 5. Aucune des solutions précédentes
  • 36. Questions entretiens PHP / MySQL 36 Comment forcer l'arrêt d'un script ? Comment inclure un script à l'intérieur d'un autre ? Comment faire une redirection ? Comment conserver des variables de page en page ? Peut-on modifier une constante ? Comment déclarer une classe en PHP 5 ? Comment faire de l'héritage en PHP 5 ? Est-il possible de faire de l'héritage multiple en PHP ? Comment initialiser les arguments d'une fonction par défaut ? Le code PHP est-il visible pour tous ? Comment concaténer des chaînes des caractères ? Quelle est la différence entre l’envoi de données en POST et en GET ? Quelle est la différence entre include et require ?