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

Tendances

Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
zan
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
Bassem ABCHA
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
Abdoulaye Dieng
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
Jean-Marc Fontaine
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
Abdoulaye Dieng
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
Ines Ouaz
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
ENSET, Université Hassan II Casablanca
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
Kristen Le Liboux
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
HamdiBaklouti
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
ENSET, Université Hassan II Casablanca
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Soufiene Bouzid
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
Damien Seguy
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
ENSET, Université Hassan II Casablanca
 
Cours javascript
Cours javascriptCours javascript
Cours javascript
krymo
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
Abdoulaye Dieng
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
ENSET, Université Hassan II Casablanca
 

Tendances (19)

Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Javascript
JavascriptJavascript
Javascript
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Cours javascript
Cours javascriptCours javascript
Cours javascript
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 

En vedette

Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
Pascal MARTIN
 
Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]Introduction à la sécurité des applications web avec php [fr]
Introduction à la sécurité des applications web avec php [fr]
Wixiweb
 
CReVote: un système de vote électronique résistant à la coercition basé sur l...
CReVote: un système de vote électronique résistant à la coercition basé sur l...CReVote: un système de vote électronique résistant à la coercition basé sur l...
CReVote: un système de vote électronique résistant à la coercition basé sur l...
pacomeambassa
 
Introduction a la SOA
Introduction a la SOAIntroduction a la SOA
Introduction a la SOA
Tugdual Grall
 
Célèbres pannes du génie logiciel
Célèbres pannes du génie logicielCélèbres pannes du génie logiciel
Célèbres pannes du génie logiciel
Nassim Bahri
 
Gidsy.com
Gidsy.comGidsy.com
Gidsy.com
Nassim Bahri
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
Kristen Le Liboux
 
Conception et développement d&rsquo;une place de marché B2C
Conception et développement d&rsquo;une place de marché B2CConception et développement d&rsquo;une place de marché B2C
Conception et développement d&rsquo;une place de marché B2C
Nassim Bahri
 
LESS, Le CSS avancé
LESS, Le CSS avancéLESS, Le CSS avancé
LESS, Le CSS avancé
Mahmoud Nbet
 
DataWerhouse : Données de qualité
DataWerhouse : Données de qualitéDataWerhouse : Données de qualité
DataWerhouse : Données de qualité
Nassim Bahri
 
Graph and RDF databases
Graph and RDF databasesGraph and RDF databases
Graph and RDF databases
Nassim Bahri
 
PHP MVC
PHP MVCPHP MVC
1 Introduction
1 Introduction1 Introduction
Overview of c++ language
Overview of c++ language   Overview of c++ language
Overview of c++ language
samt7
 
Conférence big data
Conférence big dataConférence big data
Conférence big data
Stéphane Traumat
 
Modèle en cascade
Modèle en cascadeModèle en cascade
Modèle en cascade
Ghodhbane Mohamed Amine
 
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)
Gantner Technologies
 
HTML5 & CSS3
HTML5 & CSS3HTML5 & CSS3
HTML5 & CSS3
JDerrien
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 

En vedette (20)

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

Similaire à Cours php & Mysql - 5éme partie

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
oumaimanouari
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
Etienne Lachance
 
démonstration code source site web ecole.docx
démonstration code source site web ecole.docxdémonstration code source site web ecole.docx
démonstration code source site web ecole.docx
VincentBweka
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
Damien Seguy
 
Mpdf 9
Mpdf 9Mpdf 9
Mpdf 9
Moez Moezm
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
5pidou
 
javaScript(1)-2023-2024-Partie1-Mechid (1).pdf
javaScript(1)-2023-2024-Partie1-Mechid (1).pdfjavaScript(1)-2023-2024-Partie1-Mechid (1).pdf
javaScript(1)-2023-2024-Partie1-Mechid (1).pdf
mistersmile053
 
Formation cakephp
Formation cakephpFormation cakephp
Formation cakephp
Ezzaoufi Amine
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
Rossi Oddet
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
Renaud Dumont
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Asma Messaoudi
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
Club Scientifique de l'ESI - CSE
 
ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2
Microsoft
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
Vladyslav Riabchenko
 
ASP.NET from Zero to Hero
ASP.NET from Zero to HeroASP.NET from Zero to Hero
ASP.NET from Zero to Hero
Cellenza
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
Microsoft
 

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

#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
test doc
test doctest doc
test doc
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 
démonstration code source site web ecole.docx
démonstration code source site web ecole.docxdémonstration code source site web ecole.docx
démonstration code source site web ecole.docx
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
Mpdf 9
Mpdf 9Mpdf 9
Mpdf 9
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
javaScript(1)-2023-2024-Partie1-Mechid (1).pdf
javaScript(1)-2023-2024-Partie1-Mechid (1).pdfjavaScript(1)-2023-2024-Partie1-Mechid (1).pdf
javaScript(1)-2023-2024-Partie1-Mechid (1).pdf
 
Formation cakephp
Formation cakephpFormation cakephp
Formation cakephp
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2ASP.NET MVC 5 et Web API 2
ASP.NET MVC 5 et Web API 2
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
ASP.NET from Zero to Hero
ASP.NET from Zero to HeroASP.NET from Zero to Hero
ASP.NET from Zero to Hero
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 

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 ?