PHP et PHP Framework

Post on 18-Jul-2015

247 views 3 download

Transcript of PHP et PHP Framework

PHP & PHP Framework

Sommaire

Sommaire

1. Les bases du web

Sommaire

1. Les bases du web

2. Introduction rapide au PHP

Sommaire

1. Les bases du web

3. Programmation Orientée Objet (POO)

2. Introduction rapide au PHP

Sommaire

1. Les bases du web

3. Programmation Orientée Objet (POO)

2. Introduction rapide au PHP

4. Le Framework Symfony 2

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

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

1. Les bases du web

Deux types de besoins

Deux types de besoins

Information figéeBesoin

Deux types de besoins

Information figéeBesoin

Un site internet statiqueSolution

Deux types de besoins

Information figéeBesoin

Un site internet statiqueSolution

Technologie HTML, CSS, Javascript

Deux types de besoins

Une page dont le contenu peut changerInformation figéeBesoin

Un site internet statiqueSolution

Technologie HTML, CSS, Javascript

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

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…

1.1 Comment se déroule une requête ?

Comment se passe une requête sur le web ?

Client Serveur

Comment se passe une requête sur le web ?

Client Serveur

Nom de domaine facebook.com

Comment se passe une requête sur le web ?

Requête une page

Client Serveur

Comment se passe une requête sur le web ?

Requête une page

Répond le contenu de la page

Client Serveur

Comment se passe une requête sur le web ?

Client Serveur

Comment se passe une requête sur le web ?

Client Serveur

Connexion TCP

Comment se passe une requête sur le web ?

Client Serveur

Connexion TCP

Protocole HTTP

Qu’est ce que le protocole HTTP ?

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

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

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

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

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

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

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

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

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

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

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

Qu’est ce que le protocole HTTP ?

Génération de la page

Qu’est ce que le protocole HTTP ?

Génération de la page

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 ?

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

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

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

Qu’est ce que le protocole HTTP ?

Qu’est ce que le protocole HTTP ?

Code status

2xx Success3xx Redirect4xx Client error5xx Server error

1.2 Ou peut-on stocker des informations ?

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

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

Bases de données serveur

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

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

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

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

Les cookies, concrètement

Liste de cookie- statisitics 3 - id U3Y7UID

Les cookies, concrètement

Liste de cookie- statisitics 3 - id U3Y7UID

Liste de cookie- statisitics 3 - id U3Y7UID

Les cookies, concrètement

Set-cookie- tokenUser 8879

Liste de cookie- statisitics 3 - id U3Y7UID

Les cookies, concrètement

Set-cookie- tokenUser 8879

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

Les cookies, concrètement

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

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

Les sessions, concrètement

1 2 3jeremie jean alexandreDonnées sur le

serveur

Client

Les sessions, concrètement

1 2 3jeremie jean alexandreDonnées sur le

serveur

Client

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Set-cookie- idSession 4

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Liste de cookie- idSession 4

Les sessions, concrètement

1 2 3jeremie jean alexandre

4robertDonnées sur le

serveur

Client

Liste de cookie- idSession 4

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.

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

1.3 Etude de cas : Authentification des utilisateurs

Besoins liés à la connexion d’un utilisateur

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

Besoins liés à la connexion d’un utilisateur

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

- Conserver la connexion entre deux chargement de page

Besoins liés à la connexion d’un utilisateur

- 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

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

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

1 . L’utilisateur rempli un formulaire et le soumet

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

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

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é.

Conserver la connexion entre deux chargement de page

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

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.

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.

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.

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

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.

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.

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.

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.

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.

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