36
Cours PHP/MySQL 5éme partie

Cours php & Mysql - 5éme partie

  • Upload
    kadzaki

  • View
    433

  • Download
    7

Embed Size (px)

DESCRIPTION

Cours php et Mysql

Citation preview

Page 1: Cours php & Mysql - 5éme partie

Cours PHP/MySQL5éme partie

Page 2: 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

Page 3: Cours php & Mysql - 5éme partie

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

Page 4: Cours php & Mysql - 5éme partie

Projet: Passer la commande

4

Page 5: Cours php & Mysql - 5éme partie

Sécuriser une application PHP/MySQL

5

Page 6: Cours php & Mysql - 5éme partie

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

Page 7: Cours php & Mysql - 5éme partie

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' ";

?>

Page 8: Cours php & Mysql - 5éme partie

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' ";

?>

Page 9: Cours php & Mysql - 5éme partie

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%' ";

?>

Page 10: Cours php & Mysql - 5éme partie

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

Page 11: Cours php & Mysql - 5éme partie

Injection SQL: Solution !

11

Exemple d’utilisation de la fonctionmysql_real_escape_string()

<?php

$email = mysql_real_escape_string($_POST['email']);$requete = "SELECT * FROM user WHERE email = '$email' ";

?>

Page 12: Cours php & Mysql - 5éme partie

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\_

?>

Page 13: Cours php & Mysql - 5éme partie

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;}

?>

Page 14: Cours php & Mysql - 5éme partie

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" >

Page 15: Cours php & Mysql - 5éme partie

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" >

Page 16: Cours php & Mysql - 5éme partie

Projet: Sécuriser notre site e-

commerce

16

Page 17: Cours php & Mysql - 5éme partie

Architecture MVC

17

Page 18: Cours php & Mysql - 5éme partie

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.

Page 19: Cours php & Mysql - 5éme partie

MVC: principe de fonctionnement

19

Page 20: Cours php & Mysql - 5éme partie

Projet: Adoption de l'architecture

MVC

20

Page 21: Cours php & Mysql - 5éme partie

Simulation d’entretien technique

PHP / MySQL

21

Page 22: Cours php & Mysql - 5éme partie

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

Page 23: Cours php & Mysql - 5éme partie

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

Page 24: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

24

Dans quel tableau de données retrouve-t-on les cookies du visiteur ?

1. $SETCOOKIE

2. $COOKIES

3. $_COOKIE

Page 25: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

25

Dans quel tableau de données retrouve-t-on les cookies du visiteur ?

1. $SETCOOKIE

2. $COOKIES

3. $_COOKIE

Page 26: Cours php & Mysql - 5éme partie

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()

Page 27: Cours php & Mysql - 5éme partie

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()

Page 28: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

28

Comment peut-on trier un tableau en ordre inverse ?

1. $tableau = ksort($tableau);

2. rsort($tableau);

Page 29: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

29

Comment peut-on trier un tableau en ordre inverse ?

1. $tableau = ksort($tableau);

2. rsort($tableau);

Page 30: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

30

Comment définit-on une constante ?

1. set('inconnue' = 'parfaite');

2. define("inconnue","parfaite");

3. const $inconnue = parfaite;

Page 31: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

31

Comment définit-on une constante ?

1. set('inconnue' = 'parfaite');

2. define("inconnue","parfaite");

3. const $inconnue = parfaite;

Page 32: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

32

On évalue le code suivant:

$kiwi = 'vert';$fruit = &$kiwi;$fruit = array();$fruit['kiwi'] = $kiwi;

Que contient $fruit ?

1. Rien2. wiki3. vert4. La variable n'est pas définie.

Page 33: Cours php & Mysql - 5éme partie

Questions entretiens PHP / MySQL

33

On évalue le code suivant:

$kiwi = 'vert';$fruit = &$kiwi;$fruit = array();$fruit['kiwi'] = $kiwi;

Que contient $fruit ?

1. Rien2. wiki3. vert4. La variable n'est pas définie.

Page 34: Cours php & Mysql - 5éme partie

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. wiki4. Une erreur PHP.5. Aucune des solutions précédentes

Page 35: Cours php & Mysql - 5éme partie

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. wiki4. Une erreur PHP.5. Aucune des solutions précédentes

Page 36: Cours php & Mysql - 5éme partie

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 ?