85
PHP & PHP Framework

PHP et PHP Framework

Embed Size (px)

Citation preview

Page 1: PHP et PHP Framework

PHP & PHP Framework

Page 2: PHP et PHP Framework

Sommaire

Page 3: PHP et PHP Framework

Sommaire

1. Les bases du web

Page 4: PHP et PHP Framework

Sommaire

1. Les bases du web

2. Introduction rapide au PHP

Page 5: PHP et PHP Framework

Sommaire

1. Les bases du web

3. Programmation Orientée Objet (POO)

2. Introduction rapide au PHP

Page 6: PHP et PHP Framework

Sommaire

1. Les bases du web

3. Programmation Orientée Objet (POO)

2. Introduction rapide au PHP

4. Le Framework Symfony 2

Page 7: PHP et PHP Framework

Sommaire

1. Les bases du web

3. Programmation Orientée Objet (POO)

2. Introduction rapide au PHP

4. Le Framework Symfony 2

5. La sécurité sur le web

Page 8: PHP et PHP Framework

Sommaire

1. Les bases du web

3. Programmation Orientée Objet (POO)

2. Introduction rapide au PHP

4. Le Framework Symfony 2

5. La sécurité sur le web

6. Projet de groupe : Créez votre framework

Page 9: PHP et PHP Framework

1. Les bases du web

Page 10: PHP et PHP Framework

Deux types de besoins

Page 11: PHP et PHP Framework

Deux types de besoins

Information figéeBesoin

Page 12: PHP et PHP Framework

Deux types de besoins

Information figéeBesoin

Un site internet statiqueSolution

Page 13: PHP et PHP Framework

Deux types de besoins

Information figéeBesoin

Un site internet statiqueSolution

Technologie HTML, CSS, Javascript

Page 14: PHP et PHP Framework

Deux types de besoins

Une page dont le contenu peut changerInformation figéeBesoin

Un site internet statiqueSolution

Technologie HTML, CSS, Javascript

Page 15: PHP et PHP Framework

Deux types de besoins

Une page dont le contenu peut changer

Un site internet dynamique

Information figéeBesoin

Un site internet statiqueSolution

Technologie HTML, CSS, Javascript

Page 16: PHP et PHP Framework

Deux types de besoins

Une page dont le contenu peut changer

Un site internet dynamique

Information figéeBesoin

Un site internet statiqueSolution

Technologie HTML, CSS, Javascript HTML, CSS, Javascript, langage serveur, base de données…

Page 17: PHP et PHP Framework

1.1 Comment se déroule une requête ?

Page 18: PHP et PHP Framework

Comment se passe une requête sur le web ?

Client Serveur

Page 19: PHP et PHP Framework

Comment se passe une requête sur le web ?

Client Serveur

Nom de domaine facebook.com

Page 20: PHP et PHP Framework

Comment se passe une requête sur le web ?

Requête une page

Client Serveur

Page 21: PHP et PHP Framework

Comment se passe une requête sur le web ?

Requête une page

Répond le contenu de la page

Client Serveur

Page 22: PHP et PHP Framework

Comment se passe une requête sur le web ?

Client Serveur

Page 23: PHP et PHP Framework

Comment se passe une requête sur le web ?

Client Serveur

Connexion TCP

Page 24: PHP et PHP Framework

Comment se passe une requête sur le web ?

Client Serveur

Connexion TCP

Protocole HTTP

Page 25: PHP et PHP Framework

Qu’est ce que le protocole HTTP ?

http://monsite.com/pass.php?search=a

Page 26: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

Qu’est ce que le protocole HTTP ?

http://monsite.com/pass.php?search=a

Page 27: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

http://monsite.com/pass.php?search=a

Page 28: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

http://monsite.com/pass.php?search=a

Type de requête

Page 29: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

IP client

http://monsite.com/pass.php?search=a

Type de requête

Page 30: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

IP client

Navigateur client

http://monsite.com/pass.php?search=a

Type de requête

Page 31: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

IP client

Navigateur client

Page précédente(courante)

http://monsite.com/pass.php?search=a

Type de requête

Page 32: PHP et PHP Framework

Une syntaxe commune permettant à un client et un serveur de communiquer.

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

IP client

Navigateur client

Page précédente(courante)

Conserver connection

http://monsite.com/pass.php?search=a

Type de requête

Page 33: PHP et PHP Framework

GET /pass.php/?search=a HTTP/1.1

Host: 94.128.126.14

User-Agent: Mozilla/5.0 (Windows NT 6.1)Firefox/18.0

Referer: http://monsite.com/pass.php

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 30

Qu’est ce que le protocole HTTP ?

IP client

Navigateur client

Page précédente(courante)

Conserver connection

http://monsite.com/pass.php?search=a

Type de requête

Page 34: PHP et PHP Framework

Qu’est ce que le protocole HTTP ?

http://monsite.com/pass.php?search=a

Sans keep alive Nouvelle connection TCP à chaque requête

Avec keep alive On conserve la connexion TCP entre les différentes requêtes d’un même navigateur

Page 35: PHP et PHP Framework

Deux types de requêtes HTTP

GET

POST

Requête une page avec des paramètres dans l’url

http:// bing.fr /search ?search=protocoleParamètres GETPageDomaineProtocole

Requête une page avec des paramètres dans le body HTTP

http:// bing.fr /connectPageDomaineProtocole

Page 36: PHP et PHP Framework

Qu’est ce que le protocole HTTP ?

Génération de la page

Page 37: PHP et PHP Framework

Qu’est ce que le protocole HTTP ?

Génération de la page

Page 38: PHP et PHP Framework

HTTP/1.1 200 OK

Content-Type: text/html; charset=ISO-8859-1 Connection: close

<!doctype html><html itemscope="" itemtype=«  http://schema.org/WebPage" lang=« fr"><head> <meta content="/images/

Qu’est ce que le protocole HTTP ?

Page 39: PHP et PHP Framework

HTTP/1.1 200 OK

Content-Type: text/html; charset=ISO-8859-1 Connection: close

<!doctype html><html itemscope="" itemtype=«  http://schema.org/WebPage" lang=« fr"><head> <meta content="/images/

Qu’est ce que le protocole HTTP ?

Code status

Page 40: PHP et PHP Framework

HTTP/1.1 200 OK

Content-Type: text/html; charset=ISO-8859-1 Connection: close

<!doctype html><html itemscope="" itemtype=«  http://schema.org/WebPage" lang=« fr"><head> <meta content="/images/

Qu’est ce que le protocole HTTP ?

Encodage des pages(ISO, UTF-8…)

Code status

Page 41: PHP et PHP Framework

HTTP/1.1 200 OK

Content-Type: text/html; charset=ISO-8859-1 Connection: close

<!doctype html><html itemscope="" itemtype=«  http://schema.org/WebPage" lang=« fr"><head> <meta content="/images/

Qu’est ce que le protocole HTTP ?

Code HTML à afficher

Encodage des pages(ISO, UTF-8…)

Code status

Page 42: PHP et PHP Framework

Qu’est ce que le protocole HTTP ?

Page 43: PHP et PHP Framework

Qu’est ce que le protocole HTTP ?

Code status

2xx Success3xx Redirect4xx Client error5xx Server error

Page 44: PHP et PHP Framework

1.2 Ou peut-on stocker des informations ?

Page 45: PHP et PHP Framework

Bases de données, Cookies, Sessions et Local Storage

Page 46: PHP et PHP Framework

Bases de données, Cookies, Sessions et Local Storage

Bases de données serveur

Page 47: PHP et PHP Framework

Bases de données, Cookies, Sessions et Local Storage

Bases de données serveur

Local Storage HTML 5

Session Storage HTML 5

< 5 Mo / domaine

Page 48: PHP et PHP Framework

Bases de données, Cookies, Sessions et Local Storage

Bases de données serveur

Local Storage HTML 5

Session Storage HTML 5

< 5 Mo / domaine

Cookie- Stocke des informations sur le navigateur - A une durée de vie limitée - Editable par le client et le serveur

Page 49: PHP et PHP Framework

Bases de données, Cookies, Sessions et Local Storage

Bases de données serveur

Local Storage HTML 5

Session Storage HTML 5

< 5 Mo / domaine

cookies envoyés par HTTP

Cookie- Stocke des informations sur le navigateur - A une durée de vie limitée - Editable par le client et le serveur

Page 50: PHP et PHP Framework

Bases de données, Cookies, Sessions et Local Storage

Bases de données serveur

Local Storage HTML 5

Session Storage HTML 5

< 5 Mo / domaine

cookies envoyés par HTTP

Cookie- Stocke des informations sur le navigateur - A une durée de vie limitée - Editable par le client et le serveur

Session- 1 session / navigateur - Identifiée par un cookie - Stocke des informations sur le serveur

Page 51: PHP et PHP Framework

Les cookies, concrètement

Liste de cookie- statisitics 3 - id U3Y7UID

Page 52: PHP et PHP Framework

Les cookies, concrètement

Liste de cookie- statisitics 3 - id U3Y7UID

Liste de cookie- statisitics 3 - id U3Y7UID

Page 53: PHP et PHP Framework

Les cookies, concrètement

Set-cookie- tokenUser 8879

Liste de cookie- statisitics 3 - id U3Y7UID

Page 54: PHP et PHP Framework

Les cookies, concrètement

Set-cookie- tokenUser 8879

Liste de cookie- statisitics 3 - id U3Y7UID - tokenUser 8879

Page 55: PHP et PHP Framework

Les cookies, concrètement

Liste de cookie- statisitics 3 - id U3Y7UID - tokenUser 8879

Liste de cookie- statisitics 3 - id U3Y7UID - tokenUser 8879

Page 56: PHP et PHP Framework

Les sessions, concrètement

1 2 3jeremie jean alexandreDonnées sur le

serveur

Client

Page 57: PHP et PHP Framework

Les sessions, concrètement

1 2 3jeremie jean alexandreDonnées sur le

serveur

Client

Page 58: PHP et PHP Framework

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Page 59: PHP et PHP Framework

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Set-cookie- idSession 4

Page 60: PHP et PHP Framework

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Liste de cookie- idSession 4

Page 61: PHP et PHP Framework

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Liste de cookie- idSession 4

Page 62: PHP et PHP Framework

Les sessions, concrètement

A la fermeture du navigateur le cookie de session expire. L’id de session disparait, on ne peut plus authentifier l’utilisateur.

Page 63: PHP et PHP Framework

Comparaison des stockages sur le client

- Cookies pèsent au maximum quelques Ko- Cookies sont envoyés dans chaque requêtes- Le serveur peut lire et éditer les cookies

Les cookies

- Local storage peut prendre jusqu’à 5 MoLe local storage

- Session storage peut prendre jusqu’à 5 MoLe session storage

- Supprimé à la fermeture de la session

Page 64: PHP et PHP Framework

1.3 Etude de cas : Authentification des utilisateurs

Page 65: PHP et PHP Framework

Besoins liés à la connexion d’un utilisateur

Page 66: PHP et PHP Framework

- Procéder à l’authentification grâce aux identifiants

Besoins liés à la connexion d’un utilisateur

Page 67: PHP et PHP Framework

- Procéder à l’authentification grâce aux identifiants

- Conserver la connexion entre deux chargement de page

Besoins liés à la connexion d’un utilisateur

Page 68: PHP et PHP Framework

- Procéder à l’authentification grâce aux identifiants

- Conserver la connexion entre deux chargement de page

- Se souvenir de l’utilisateur au prochain démarrage du navigateur

Besoins liés à la connexion d’un utilisateur

Page 69: PHP et PHP Framework

Procéder à l’authentification grâce aux identifiants

Page 70: PHP et PHP Framework

Procéder à l’authentification grâce aux identifiants

1 . L’utilisateur rempli un formulaire et le soumet

Page 71: PHP et PHP Framework

Procéder à l’authentification grâce aux identifiants

1 . L’utilisateur rempli un formulaire et le soumet

2. Pour l’envoi du formulaire une requête de type POST est choisie

Page 72: PHP et PHP Framework

Procéder à l’authentification grâce aux identifiants

1 . L’utilisateur rempli un formulaire et le soumet

2. Pour l’envoi du formulaire une requête de type POST est choisie

3. Pour éviter l’interception de la requête et le vol du mot de passe et du nom d’utilisateur, on utilise une connexion HTTPS

Page 73: PHP et PHP Framework

Procéder à l’authentification grâce aux identifiants

1 . L’utilisateur rempli un formulaire et le soumet

2. Pour l’envoi du formulaire une requête de type POST est choisie

3. Pour éviter l’interception de la requête et le vol du mot de passe et du nom d’utilisateur, on utilise une connexion HTTPS

4. On hash le mot de passe. On vérifie les données dans la base de donnée du serveur. Si l’utilisateur existe et que le mot de passe est le bon alors l’utilisateur est connecté.

Page 74: PHP et PHP Framework

Conserver la connexion entre deux chargement de page

Page 75: PHP et PHP Framework

Conserver la connexion entre deux chargement de page

1 . Lors de la connexion de l’utilisateur on sauvegarde son nom d’utilisateur dans une session

Page 76: PHP et PHP Framework

Conserver la connexion entre deux chargement de page

1 . Lors de la connexion de l’utilisateur on sauvegarde son nom d’utilisateur dans une session

2. On génère un identifiant de session purement aléatoire qui ne doit pas être prédictible.

Page 77: PHP et PHP Framework

Conserver la connexion entre deux chargement de page

1 . Lors de la connexion de l’utilisateur on sauvegarde son nom d’utilisateur dans une session

2. On génère un identifiant de session purement aléatoire qui ne doit pas être prédictible.

3. On stocke l’identifiant de Session dans un cookie à l’aide du header set-cookie dans la réponse HTTP. Ce cookie doit être Http-Only.

Page 78: PHP et PHP Framework

Conserver la connexion entre deux chargement de page

1 . Lors de la connexion de l’utilisateur on sauvegarde son nom d’utilisateur dans une session

2. On génère un identifiant de session purement aléatoire qui ne doit pas être prédictible.

3. On stocke l’identifiant de Session dans un cookie à l’aide du header set-cookie dans la réponse HTTP. Ce cookie doit être Http-Only.

4. Lors de la requête suivante, si un identifiant de session est spécifié dans les cookies ont l’utilise pour identifier notre utilisateur.

Page 79: PHP et PHP Framework

Se souvenir de l’utilisateur au prochain démarrage du navigateur

Page 80: PHP et PHP Framework

Se souvenir de l’utilisateur au prochain démarrage du navigateur

1 . Quand « Remember Me » est coché au moment de la connexion un cookie additionnel est créé qui permet d’authentifier l’utilisateur si sa session est supprimée.

Page 81: PHP et PHP Framework

Se souvenir de l’utilisateur au prochain démarrage du navigateur

1 . Quand « Remember Me » est coché au moment de la connexion un cookie additionnel est créé qui permet d’authentifier l’utilisateur si sa session est supprimée.

2. Ce nouveau cookie contient le nom d’utilisateur, un n° serie utilisateur et un token créé pour l’occasion. Le token et le n° de série sont unique, aléatoire et long. On stocke le triplet dans la base de donnée serveur.

Page 82: PHP et PHP Framework

Se souvenir de l’utilisateur au prochain démarrage du navigateur

1 . Quand « Remember Me » est coché au moment de la connexion un cookie additionnel est créé qui permet d’authentifier l’utilisateur si sa session est supprimée.

2. Ce nouveau cookie contient le nom d’utilisateur, un n° serie utilisateur et un token créé pour l’occasion. Le token et le n° de série sont unique, aléatoire et long. On stocke le triplet dans la base de donnée serveur.

3. Quand un utilisateur non authentifié visite le site et qu’il possède dans son cookie le triplet on essaie de l’authentifier. On regarde si le triplet existe dans la base de donnée.

Page 83: PHP et PHP Framework

Se souvenir de l’utilisateur au prochain démarrage du navigateur

1 . Quand « Remember Me » est coché au moment de la connexion un cookie additionnel est créé qui permet d’authentifier l’utilisateur si sa session est supprimée.

2. Ce nouveau cookie contient le nom d’utilisateur, un n° serie utilisateur et un token créé pour l’occasion. Le token et le n° de série sont unique, aléatoire et long. On stocke le triplet dans la base de donnée serveur.

3. Quand un utilisateur non authentifié visite le site et qu’il possède dans son cookie le triplet on essaie de l’authentifier. On regarde si le triplet existe dans la base de donnée.

3.1. Si le triplet est présent, l’utilisateur est considéré comme authentifié. On supprime le token et on en génère un nouveau qu’on retourne au client.

Page 84: PHP et PHP Framework

Se souvenir de l’utilisateur au prochain démarrage du navigateur

1 . Quand « Remember Me » est coché au moment de la connexion un cookie additionnel est créé qui permet d’authentifier l’utilisateur si sa session est supprimée.

2. Ce nouveau cookie contient le nom d’utilisateur, un n° serie utilisateur et un token créé pour l’occasion. Le token et le n° de série sont unique, aléatoire et long. On stocke le triplet dans la base de donnée serveur.

3. Quand un utilisateur non authentifié visite le site et qu’il possède dans son cookie le triplet on essaie de l’authentifier. On regarde si le triplet existe dans la base de donnée.

3.1. Si le triplet est présent, l’utilisateur est considéré comme authentifié. On supprime le token et on en génère un nouveau qu’on retourne au client.

3.2. Si seul le token ne matche pas, l’utilisateur est menacé. On supprime le triplet de la base. On prévient l’utilisateur de la menace.

Page 85: PHP et PHP Framework

Ceci n’est un extrait du cours, contactez-nous pour plus d’informations.

https://www.linkedin.com/pub/jérémie-campari/55/205/275