From: Kim Nguyễn Date: Sat, 13 Sep 2014 10:39:49 +0000 (+0200) Subject: Rename prog_internet -> unix_prog_web X-Git-Url: http://git.nguyen.vg/gitweb/?p=hacks%2FsimpleWebSlides.git;a=commitdiff_plain;h=0a552a95e70324a04e9d06bd30ac5bc96b2a58b5 Rename prog_internet -> unix_prog_web --- diff --git a/prog_internet/cours_4.svg b/prog_internet/cours_4.svg deleted file mode 100644 index d26b090..0000000 --- a/prog_internet/cours_4.svg +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - Internet - Client(Navigateur Web) - - - Serveur(programme) - - Client(Machine) - Documents - Serveur(machine) - - PHP - Java - - HTMLCSS - Javascript - - Requêtes - Réponses(pages, images, vidéos, scripts, …) - - - - - - - - diff --git a/prog_internet/password.html b/prog_internet/password.html deleted file mode 100644 index 5d82e83..0000000 --- a/prog_internet/password.html +++ /dev/null @@ -1,10 +0,0 @@ - - -
- Username:
- Password:
- -
- - diff --git a/prog_internet/password2.php b/prog_internet/password2.php deleted file mode 100644 index e257b59..0000000 --- a/prog_internet/password2.php +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/prog_internet/pdf/prog_internet_05.pdf b/prog_internet/pdf/prog_internet_05.pdf deleted file mode 100644 index 9e7d20f..0000000 Binary files a/prog_internet/pdf/prog_internet_05.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_05_print.pdf b/prog_internet/pdf/prog_internet_05_print.pdf deleted file mode 100644 index e7b8793..0000000 Binary files a/prog_internet/pdf/prog_internet_05_print.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_06.pdf b/prog_internet/pdf/prog_internet_06.pdf deleted file mode 100644 index 73bf2e5..0000000 Binary files a/prog_internet/pdf/prog_internet_06.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_06_print.pdf b/prog_internet/pdf/prog_internet_06_print.pdf deleted file mode 100644 index 251df42..0000000 Binary files a/prog_internet/pdf/prog_internet_06_print.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_07.pdf b/prog_internet/pdf/prog_internet_07.pdf deleted file mode 100644 index 15594ef..0000000 Binary files a/prog_internet/pdf/prog_internet_07.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_07_print.pdf b/prog_internet/pdf/prog_internet_07_print.pdf deleted file mode 100644 index 423e576..0000000 Binary files a/prog_internet/pdf/prog_internet_07_print.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_08.pdf b/prog_internet/pdf/prog_internet_08.pdf deleted file mode 100644 index ca5cae4..0000000 Binary files a/prog_internet/pdf/prog_internet_08.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_08_print.pdf b/prog_internet/pdf/prog_internet_08_print.pdf deleted file mode 100644 index 0ee96d9..0000000 Binary files a/prog_internet/pdf/prog_internet_08_print.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_09.pdf b/prog_internet/pdf/prog_internet_09.pdf deleted file mode 100644 index 393ed86..0000000 Binary files a/prog_internet/pdf/prog_internet_09.pdf and /dev/null differ diff --git a/prog_internet/pdf/prog_internet_09_print.pdf b/prog_internet/pdf/prog_internet_09_print.pdf deleted file mode 100644 index 86df3a2..0000000 Binary files a/prog_internet/pdf/prog_internet_09_print.pdf and /dev/null differ diff --git a/prog_internet/prog_internet_01.xhtml b/prog_internet/prog_internet_01.xhtml deleted file mode 100644 index 5928b08..0000000 --- a/prog_internet/prog_internet_01.xhtml +++ /dev/null @@ -1,787 +0,0 @@ - - - - - Systèmes d'exploitation (1/2) - - - - - - - - - - - - - - - - - - - - -
-

Programmation Internet

-

Cours 1

- kn@lri.fr -
- -
-

Contenu du cours

-
    -
  1. Comprendre les bases du Web -
      -
    • Fonctionnement des ordinateusr Unix (cours 1 et 2)
    • -
    • Notions de réseau (cours 3 et 4)
    • -
    -
  2. -
  3. Programmer (pour) le Web -
      -
    • Pages statiques (HTML & CSS cours 5)
    • -
    • Pages dynamiques avec PHP (cours 6, 7 et 8)
    • -
    • Notions de sécurité des sites Web (cours 9)
    • -
    • Bonus (cours 10)
    • -
    -
  4. -

    Cours disponible en ligne - sur https://www.lri.fr/~kn/teaching_fr.html. Les - supports de cours seront distribués à partir de la semaine prochaine.

    -
- -
-
-

Modalités de Contrôle des Connaissances (MCC)

-

2 sessions:

- -

Rappel: - La défaillance fait obstacle au calcul de la moyenne - et implique l'ajournement. - La présence de l'étudiant étant obligatoire en TP [...], plus - d'une absence injustiée dans un enseignement peut entraîner - la défaillance de l'étudiant dans l'enseignement concerné - -

-
- -
-

Organisation

- -
-
-

Plan

-
    -
  1. Systèmes d'exploitation -
      -
    • 1.1 Principes des systèmes - d'exploitation
    • -
    • 1.2 Système de gestion de fichiers
    • -
    • 1.3 Système de gestion de processus
    • -
    -
  2. -
-
- -
-

Système d'exploitation

-

Quelques systèmes:

- -
- -
-

Système d'exploitation

-

Qu'est-ce qu'un système d'exploitation ?

- -

Quelles sont les ressources d'une machine?

- -
-
-

Système d'exploitation

-
-
- Haut niveau
- ↓
- Bas niveau -
-
-
    -
  • Applications: navigateur Web, éditeur de - texte, anti-virus, jeu, compilateur, …
  • -
  • Système d'exploitation: -
      -
    • Gestion des ressources
    • -
    • Interface avec le matériel (pilotes)
    • -
    -
  • -
  • Matériel: CPU, mémoire, périphériques, …
  • -
-
-
-
-

Le système Unix

- - - - - - - - - - - -
1965 MultICS: Multiplexed Information and Computing Service (Bell & MIT)
1969 Unix: 1ère version en - assembleur (AT&T)
1972-73 Unix réécrit en C
1976 Invention de TCP/IP
1977 Berkeley Software Distribution - (BSD)
1985Unix System V
1988Minix
1992Linux
-
-
-
-

Unix : architecture

- - - - - - - - - - - - -
- Applications -
- Interface utilisateur - - Services -
- Noyau (kernel) -
- Micro-code -
- Matériel -
-
-
-
-

Zoom sur le noyau

- - - - - -
- Applications -
- - Bibliothèques - (libc, DirectX, OpenGL, …) -
-
- - - - - - - -
- Appels systèmes -
- Noyau
-
- pilotes de périphériques - ordonnanceur (gestion du temps CPU)
- gestionnaire de mémoire - système de fichier
-
-
- Matériel -
-
-
-

Le Shell Unix

- -
-
-

Le Shell Unix

-

Exemple de session shell:

-
- - $ ls - Documents Downloads Public Person - $ cd Documents - $ ls - compte_rendu.txt - $ mv compte_rendu.txt cr.txt - $ ls - cr.txt - -
-
- -
-

Plan

-
    -
  1. Systèmes d'exploitation -
      -
    • 1.1 Principes des systèmes - d'exploitation
    • -
    • 1.2 Système de gestion de fichiers
    • -
    • 1.3 Système de gestion de processus
    • -
    -
  2. -
-
-
-

Système de gestion de fichiers (filesystem)

- -
-
-

Le concept de fichier

-

- Un fichier est une collection d'infromations - numériques réunies sous un même nom et - enregistrée sur un support de stockage -

- -
-
-

Le concept de fichier

-

Ne pas confondre:

- -
-
-

Les attributs d'un fichier

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nom -
Propriétaireutilisateur qui possède ce fichier
Groupegroupe d'utilisateurs qui possède ce fichier
Emplacementlocalisation du fichier sur le support physique
Tailleen octet (peut être la taille réelle ou la taille - occupée sur le support)
Permissions « qui a quel droit » sur le fichier (lecture, écriture, - exécution, …) -
Type -
Datesdernier accès, dernière modification, création, …
-
-
-

Organisation logique des fichiers

-

Usuellement, les fichiers sont regroupés en répertoires. Les -répertoires sont imbriqués les uns dans les autres de manière a former -une arborescence. -

-

- Sous Unix il y a un répertoire racine, « / » -(slash) qui contient toute l'arborescence du système.
-Chaque utilisateur possède aussi un répertoire personnel -

-
- -
-

Noms de fichiers et chemins

-

-Un chemin est une liste de répertoire à traverser pour -atteindre un fichier ou répertoire donné. -Sous Unix, le séparateur de chemin est le « / »
-Les chemins absolus commencent par un / et - dénotent des fichiers à partir de la racine. Exemple: - - /home/kim/Documents/ProgInternet/cours01.pdf - -Les chemins relatifs dénotent des fichiers à partir du - répertoire courant. Exemple:
- Documents/ProgInternet/cours01.pdf -si on se trouve dans le répertoire /home/kim -
-
-Les noms spéciaux: « . » dénote le répertoire - courant, - « .. » le répertoire parent, « ~ » le répertoire de - l'utilisateur et « ~toto » le répertoire de l'utilisateur - toto -

-
- -
-

Utilisation du Shell

-

- Le shell affiche un invite de commande - (prompt). Exemple:
- kim@machine $

- On peut alors saisir une commande:

- kim@machine $ ls *.txt

- Le shell affiche la sortie de la commande:

- fichier1.txt fichier2.txt

- Certains caractères doivent être précédés d'un « \ » (échappés):

- kim@machine $ ls mon\ fichier\#1.txt -

-
-
-

La ligne de commande

-

- Une ligne de commande a la forme:
- prog item1 item2 item3 item4 … -

-
    -
  1. Si prog est un chemin il doit - dénoter un fichier exécutable -
  2. -
  3. Si prog est un simple nom, il doit dénoter un fichier - exécutable se trouvant dans un des répertoires prédéfinis - (/bin, /usr/bin, …) -
  4. -
  5. Pour chaque itemi (séparés par un ou plusieurs espaces - non échappés) le shell fait une expansion de nom -
  6. -
  7. La liste de toutes les chaînes de caractères expansées est - passée comme argument au programme prog -
  8. -
-
-
-

Expansion des noms
Expressions régulières glob

-

- Certains caractères sont interprétés de manière spéciale par le - shell. Ces caractères sont « expansés » selon des - règles. Si la forme expansée correspond a un ou plusieurs fichiers - existants, alors leurs noms sont placés sur la ligne de commande. Sinon - la chaîne de caractère de départ garde sa valeur textuelle. -

-
-
-

Expressions régulières glob

-

Règles d'expansion: - * n'importe quelle chaîne
- ? n'importe quel caractère - [ab12…] un caractère dans la liste
- [^ab12…] un caractère absent de liste
- [a-z] un caractère dans l'intervalle
- [^a-z] un caractère absent de l'intervalle
- {m1, m2} - motif m1 ou m2
- ?(m1|…|mn) - - @(m1|…|mn) - - *(m1|…|mn) - - +(m1|…|mn)
- k motifs parmi mi
- ?: 0 ≤ k ≤ 1 - - @: k = 1 - - *: k ≥ 0 - - +: k ≥ 1 -
- !(m1|…|mn): - ni m1, …, ni mn -

-
-
-

Expressions régulières glob
Exemples

-

ls !(*[aeiouy]?) - La chaine « !(*[aeiouy]?) » est remplacée par la liste de tous - les fichiers dont l'avant dernière lettre du nom n'est pas une - voyelle. S'il n'y a pas de tel fichier, la chaîne - « !(*[aeiouy]?) » est passée à la commande ls.

- - ls [0-9]* affiche la liste des fichiers commençant par un - chiffre

- ls +(abc) affiche la liste des fichiers dont le nom est une - répétition de « abc Â». -
-

-
-
-

Commandes shell de base

- -
-
-

Droits et propriétés des fichiers

-

-Sous Unix un utilisateur est identifié par son login (ou nom -d'utilisateur). Chaque utilisateur est dans un groupe - principal.
-Chaque fichier appartient à un utilisateur et à un groupe.
-Chaque fichier possède 3 permissions pour son propriétaire, son groupe -et tous les autres. Les permissions sont lecture, écriture, exécution -(plus d'autres non abordées dans ce cours).
- - - - - - - - - -
Permission fichier répertoire
lecture (r) lire le contenu du - fichierlister le contenu du répertoire
écriture (w) écrire dans le fichiersupprimer/renommer/créer des - fichiers dans le répertoire
exécution - (x) exécuter le fichier - (si
- - c'est un programme)
rentrer dans le répertoire -
-$ ls -l -drwxr-x--- 9 kim prof 4096 Sep 7 21:31 Documents -

-
-
-

La commande chmod

- - chmod permissions chemin1 … cheminn - -

modifie les permissions des fichiers 1 à n. La chaîne -permissions est soit une suite de modifications de -permissions symbolique soit l'ensemble des permissions données -de manière numérique:
- - chmod 755 fichier.txt - chmod u-w,a+x,g=w fichier.txt - -

-
-
-

Permissions numériques

-

-On groupe les bits de permissions par trois puis on convertit -en décimal:
- - - - - - - - - - - - - - -
Utilisateur - GroupeAutres
r w x r w x r w x
1 1 0 1 0 0 0 0 0
6 - 40
-Le fichier est lisible et modifiable mais pas exécutable par son -propriétaire, lisible pour le groupe. Les autres ne peuvent ni le lire -ni le modifier.

-
-
-

Permissions symboliques

- - cible modifieur permission - - -

-Exemple:
- chmod u+rw,u-x,g+r,g-wx,o-rwx fichier.txt -

-
-
-

Liens symboliques (1)

-

Pour des raisons d'organisation, on veut pouvoir « voir » le même - fichier ou répertoire sous deux noms différents (ou à deux endroits - différents). Par exemple: -

- - $ ls -l Documents/Cours - total 8 - drwxr-xr-x 3 kim prof 4096 Sep 9 11:30 Licence - drwxr-xr-x 3 kim prof 4096 Sep 9 11:30 Master - - $ cd Documents/Cours/Master; ls - Compilation XMLProgInternet - - $ cd XML_Prog_Internet; ls - cours01 cours02 cours03 cours04 cours05 cours06 Prereq - - $ ls -l Prereq - lrwxrwxrwx 1 kim prof 28 Sep 9 11:30 Prereq -> ../../Licence/UnixProgWeb/ - - -
-
-

Liens symboliques (2)

-

La commande ln permet de créer des liens - symboliques. Un lien est un petit fichier qui contient - un chemin vers un fichier de destination. -

-

Exemple d'utilisation

- $ ln -s ../foo/bar/baz/toto.txt rep/titi.txt - -

crée un lien vers le fichier toto.txt - sous le nom titi.txt (chacun placé dans des sous/sur - répertoires) -

- -

Cela permet de créer l'illusion que la cible a été copiée à - l'identique, sans les inconvénients

-
-
-

À propos de la suppression

-

La commande rm fichier efface un fichier définitivement
- La commande rm -d rep efface un répertoire s'il est vide
- La commande rm -r rep efface un répertoire récursivement - mais demande confirmation avant d'effacer des éléments
- La commande rm -rf rep efface un répertoire - récursivement et sans confirmation

-

Toute suppression est définitive

-

Gag classique :

- $ mkdir \~ - ... - $ ls - Documents Photos Musique ~ - $ rm -rf ~ - ☠ ☠ ☠ ☠ ☠ ☠ - -
-
-

Obtenir de l'aide sur une commande

-

La commande man permet d'obtenir de l'aide sur - une commande. Lors qu'une page d'aide est affichée, on peut la faire - défiler avec les touches du clavier, la quitter avec « q » - et rechercher un mot avec la touch « / »

- -LS(1L) Manuel de l'utilisateur Linux LS(1L) - - -NOM - ls, dir, vdir - Afficher le contenu d'un répertoire. - -SYNOPSIS - ls [options] [fichier...] - - Options POSIX : [-1acdilqrtuCFR] - - Options GNU (forme courte) : [-1abcdfgiklmnopqrstuxABCD­ - FGLNQRSUX] [-w cols] [-T cols] [-I motif] [--full-time] - [--format={long,verbose,commas,across,vertical,single-col­ - umn}] [--sort={none,time,size,extension}] - [--time={atime,access,use,ctime,status}] - [--color[={none,auto,always}]] [--help] [--version] [--] - -DESCRIPTION - La commande ls affiche tout d'abord l'ensemble de ses - arguments fichiers autres que des répertoires. Puis ls - affiche l'ensemble des fichiers contenus dans chaque - répertoire indiqué. dir et vdir sont des versions de ls - affichant par défaut leurs résultats avec d'autres for­ - mats. - - - -
-
-

Recherche de fichiers

-

La commande find rep criteres permet de trouver - tous les fichiers se trouvant dans le répertoire rep (ou un - sous répertoire) et répondant à certains critères. Exemples de - critères :

- -

Comment trouver toutes les options de la commande find - ? man find

-
-
-

Quelques commandes utiles

- -

On verra comment composer ces commandes pour exécuter des - opérations complexes

-
- - diff --git a/prog_internet/prog_internet_02.xhtml b/prog_internet/prog_internet_02.xhtml deleted file mode 100644 index 497e323..0000000 --- a/prog_internet/prog_internet_02.xhtml +++ /dev/null @@ -1,1119 +0,0 @@ - - - - - Systèmes d'exploitation (2/2) - - - - - - - - - - - - - - - - - - - - -
-

Programmation Internet

-

Cours 2

-
kn@lri.fr
- http://www.lri.fr/~kn -
- -
-

Plan

-
    -
  1. Systèmes d'exploitation -
      -
    • 1.1 Principes des systèmes - d'exploitation ✔
    • -
    • 1.2 Système de gestion de fichiers ✔
    • -
    • 1.3 Système de gestion de processus
    • -
    -
  2. -
-
- -
-

Définitions

- - - - - - - - - - - - - - - -
Programme séquences d'instructions effectuant - une tâche sur un ordinateur
Exécutable fichier binaire contenant des - instructions machines interprétables par le - microprocesseur
Thread plus petite unité de traitement (≡ - séquence d'instructions) pouvant être ordonnancée par - l'OS -
Processus instance d'un programme (≡ « un - programme en cours d'exécution »). Un processus est constitué - de un ou plusieurs threads.
-
- -
-

Exemple: programme

-

Dans un fichier « counter.c » - (attention c'est du pseudo - C)

-
- int count = 0; - int exit = 0; - void display() { - while (exit == 0) { - sleep (3); - printf("%i\n", count); - } - } - void listen() { - while (exit == 0) { - wait_connect(80); - count++; - } - } -
- void main () { - run_function(display); - run_function(listen); - while (getc () != '\n') { }; - exit = 1; - return; - } -
-
-
-

Exemple: programme

-

Compilation
- - gcc -o counter.exe counter.c -
- Le fichier « counter.exe » est un - exécutable (fichier binaire contenant du code machine)
- - ./counter.exe ← il faut la permission +x sur le fichier - -
- Le contenu de l'exécutable est copié en mémoire et le processeur - commence à exécuter la première instruction du programme. -

-
-
-

Exemple: threads

-
    -
  1. main
  2. -
  3. attente d'un évènement clavier - →←changement de thread -
  4. -
  5. listen
  6. -
  7. attente de connexion →←changement de thread -
  8. -
  9. display (affiche - 0 à l'écran)
  10. -
  11. attente pendant 3s → (les - 3 threads attendent un évènement externe)
    - nouvelle connexion sur le port 80 ← - réveil du thread listen -
  12. -
  13. listen - (incrémente count)
    - attente de connexion →
    - … fin des 3s
    - ← - réveil du thread display -
  14. -
  15. display (affiche - 1 à l'écran)
  16. -
-

Les threads partagent leur mémoire (variables communes)

-
-
-

Exemple: processus

-

(différence: les processus - ne partagent pas leur espace mémoire)

-
    -
  1. Exécution de counter.exe pendant 50㎲ -
  2. -
  3. Exécution - de firefox.exe - pendant 50㎲
  4. -
  5. Exécution du processus qui dessine le bureau pendant 50 - ㎲
    …
  6. - -
-

C'est le gestionnaire de processus qui décide quel - programme a la main et pour combien de temps (priorité aux - tâches critiques par exemple)
- Le système d'exploitation stocke pour chaque processus un - ensemble d'informations, le PCB (Process Control Block). -

-
-
-

Proccess Control Block

-

Le PCB contient:

- -
-
-

Opérations sur les processus

- -
-
-

États d'un processus

-

Un processus change d'état au cours de son exécution

- - - - - - -
Nouveau le processus est en cours de création
Exécution le processus s'exécute
En attente le processus attend un évènement - particulier (saisie au clavier, écriture sur le disque, - …)
Prêt le processus est prêt à reprendre son - exécution et attend que l'OS lui rende la main
terminé le processus a fini son exécution
-
-
-

États d'un processus

-

L'OS détermine et modifie l'état d'un processus:

- -
-
-

États d'un processus

- - - - - - - - - Nouveau - Prêt - En exécution - En attente - - - - - - - - - - Terminé - - - - - mise en routepar l'ordonnanceur - interruptionpar l'ordonnanceur - attente E/Sinterruption - fin E/Sint. traitée… - terminaisonnormale - terminaisonanormale - - - -
-
-

La commande ps

-

Permet d'avoir des informations sur les processus en cours - d'exécution (voir « man ps » pour les - options):
- $ ps -o user,pid,state,cmd x - USER PID S CMD - … - kim 27030 Z [chrome] <defunct> - kim 27072 S /opt/google/chrome/chrome --type=renderer - kim 29146 S bash - kim 29834 S evince - kim 29858 S emacs cours.xhtml - kim 29869 R ps -o user,pid,state,cmd x -
-

- -
-
-

États des processus (sous Linux)

- - - - - - -
R Running (en cours d'exécution)
S Interruptible sleep (en attente, - interruptible)
D Uninterruptible sleep (en attente, - non-interruptible)
T Stopped (interrompu)
Z Zombie (terminé mais toujours - listé par le système)
-
- -
-

Signaux

-

L'OS peut envoyer des signaux à un processus. Sur réception - d'un signal, un processus peut interrompre son comportement normal - et exécuter son gestionnaire de signal. Quelques signaux: -

- - - - - - - - - -
Nom Code Description
HUP 1 demande au processus de - s'interrompre
INT 2 demande au processus de se - terminer
ABRT 2 interrompt le processus et produit - un dump
KILL 9 interrompt le processus immédiatement -
SEGV 11 signale au processus une erreur mémoire -
STOP 24 suspend l'exécution du processus -
CONT 28 reprend l'exécution d'un processus suspendu -
-
-
-

Processus et terminal

-

Un processus est lié au terminal dans lequel il est - lancé. Si on exécute un programme dans un terminal et que le - processus ne rend pas la main, le terminal est bloqué - - - $ gedit - - - On peut envoyer au processus le signal STOP en - tapant ctrl-Z dans le terminal: - - - $ gedit - ^Z - [1]+ Stopped gedit - - - Le processus est suspendu, la fenêtre est gelée (ne répond plus). -

-
-
-

Processus et terminal

-

On peut reprendre l'exécution du programme de deux - manières:
- $ fg
- Reprend l'exécution du processus et le remet en avant plan (terminal - bloqué)

- $ bg
- Reprend l'exécution du processus et le remet en arrière plan (terminal -libre)

- On peut lancer un programme - directement en arrière plan en faisant:
- $ gedit &
- On peut envoyer un signal à un - processus avec la commande « kill [-signal] pid Â»
- $ kill -9 2345
-

-
-
-

Processus et entrées/sorties

-

Le terminal et le processus sont liés par trois fichiers - spéciaux:

-
    -
  1. L'entrée standard (stdin), reliée - au clavier
  2. -
  3. La sortie standard (stdout), reliée - à l'affichage
  4. -
  5. La sortie d'erreur (stderr), reliée - à l'affichage
  6. -
-

Dans le shell, on peut utiliser les - opérateurs <, > - et 2> pour récupérer le contenu - de stdin, stdout - et stderr:
- -$ sort < toto.txt -$ ls -l > liste_fichiers.txt -$ ls -l * 2> erreurs.txt - -

-
-
-

Processus et entrées/sorties

-

Dans le shell, l'opérateur | permet - d'enchaîner la sortie d'un programme avec l'entrée d'un - autre:
- $ ls -l *.txt | sort -n -r -k 5 | head -n 1 -

-
    -
  1. affiche la liste détaillée des - fichiers textes
  2. -
  3. trie (et affiche) l'entrée standard par ordre - numérique décroissant selon le 5ème champ
  4. -
  5. affiche la première ligne de - l'entrée standard
  6. -
-
- -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt - -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt - -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt - -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt - -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt - -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt - - -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt - -
- -
-
-

Processus de type daemon

-

- Un daemon (prononcé démon) est un processus - qui non-interactif qui tourne en tâche de fond (pas - d'entrée/sortie sur le terminal, pas d'interface graphique, …). On - communique avec ce processus via des signaux ou en lisant - ou écrivant dans des fichiers ou connexions réseau. Le plus souvent, - leur but est de fournir un service -

-

Exemple de scénario: « Les utilisateurs doivent interagir avec - le matériel. L'accès au matériel demande des droits - administrateur. » -

- -
-
-

Quelques daemons sous Linux

- - - - - - - - - - -
Nom Description
sshd shell distant sécurisé
crond exécution périodique de programmes
cupsd serveur d'impressions
pulseaudio serveur de son (mixe les sons des - différentes applications)
udevd détection de matériel hotplug
nfsd serveur de fichier réseau
smtpd livraison des e-mail
httpd serveur de pages Web
-
-
-

Architecture client-serveur

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Client - - - - - Serveur - - - - - - - - - Client - - - - - - - - - - - - - - Client - - - - - - Client - - - - - - - - - - Client - - - - - - Client - - - - - - - - - - - - - -

-

- Des processus clients communiquent - avec le serveur à travers le - réseau. Les clients sont indépendant et ne communiquent pas entre - eux. Attention plusieurs clients peuvent se trouver su la - même machine physique! -

-
-
-

Architecture client-serveur

- -

Exemples: serveur de bases de données, serveur mail, serveur Web, - terminal de carte bancaire, …

-
- - diff --git a/prog_internet/prog_internet_03.xhtml b/prog_internet/prog_internet_03.xhtml deleted file mode 100644 index b3dd771..0000000 --- a/prog_internet/prog_internet_03.xhtml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - Réseaux, TCP/IP - - - - - - - - - - - - - - - - - - - - -
-

Programmation Internet

-

Cours 2

-
kn@lri.fr
- http://www.lri.fr/~kn -
- - - - diff --git a/prog_internet/prog_internet_04.xhtml b/prog_internet/prog_internet_04.xhtml deleted file mode 100644 index b0264bd..0000000 --- a/prog_internet/prog_internet_04.xhtml +++ /dev/null @@ -1,549 +0,0 @@ - - - - - Web et HTML - - - - - - - - - - - - - - - - - - - -
-

Programmation Internet

-

Cours 4

-
kn@lri.fr
- http://www.lri.fr/~kn -
- -
-

Plan

-
    -
  1. Systèmes d'exploitation ✔
  2. -
  3. Réseaux et Internet ✔
  4. -
  5. Le Web -
      -
    • 3.1 Internet et ses services
    • -
    • 3.2 Fonctionnement du Web
    • -
    • 3.3 Adressage des documents Web
    • -
    • 3.4 Le protocole HTTP
    • -
    • 3.5 HTML, le format des documents
    • -
    -
  6. -
-
-

Internet et ses services

-
-

Bref historique d'Internet (1/2)

- - - - - - - - - - - - - - - -
1959-1968 ARPA - (Advanced Research Project Agency) crée un réseau - de quelques machines capable de résister à une attaque.
1969 ARPANET. Interconnexion des ordinateurs - centraux des grandes universités et institutions - américaines. Première utilisation du concept de paquet d'information.
1970-1982 Interconnexion avec la Norvège et le Royaume-Uni. -
1982 Passage au protocole TCP/IP. Naissance de l'Internet actuel.
-
-
-

Bref historique d'Internet (2/2)

- - - - - - - - - - - - - - - -
1986 « Autoroutes de - l'information ». Des super-ordinateurs et les premières - connexions à fibres optiques sont utilisées pour accélérer - le débit d'Internet.
1987-1992 Apparition des premiers fournisseurs - d'accès. Les entreprises se connectent.
1993-2000 Avènement du Web. Démocratisation du haut-débit (vers - 2000 pour la France). -
2000-présent Explosion des services en ligne, arrivée des réseaux - sociaux, internet mobile, Cloud (stockage et calcul - mutualisés accessible depuis internet).
-
- -
-

Internet

- -
-
-

Exemples de services

- - - - - - - - - - - - - - - - -
ServiceProtocolePortDescription
ftp File Transfer Protocol - 20,21 Transfert de fichiers
telnet Network Virtual - Terminal 23 Shell à distance
ssh Secure Shell 22Shell à - distance crypté
mailSimple Mail Transfer - Protocol 25 Envoi de mail
pop Post Office - Protocol 110Récupération de mail
imap Internet Message Access - Protocol 143Synchronisation de mails
nslookup Domain Name - System 42 Serveur de noms
http Hyper Text Transfer Protocole80Web
-
-
-

World Wide Web (1/2)

- -
- -
-

World Wide Web (2/2)

-

Concepts clé:

- - - - -
URL localisation d'une page Web (« adresse de - la page »)
HTTP protocole de communication entre un - client et un serveur Web
HTML langage de description des pages - Web
-

Évolutions récentes (Web 2.0, internet mobile, Cloud, …)

- -
- - -
-

Plan

-
    -
  1. Systèmes d'exploitation
  2. -
  3. Réseaux et Internet
  4. -
  5. Le Web -
      -
    • 3.1 Internet et ses services
    • -
    • 3.2 Fonctionnement du Web
    • -
    • 3.3 Adressage des documents Web
    • -
    • 3.4 Le protocole HTTP
    • -
    • 3.5 HTML, le format des documents
    • -
    -
  6. -
-
-

Fonctionnement du Web

-
-

Fonctionnement du Web

-
- -
- -
- -
-

Côté client

-

Le navigateur :

- -
- -
-

Côté serveur

- -
- -
-

Plan

-
    -
  1. Systèmes d'exploitation
  2. -
  3. Réseaux et Internet
  4. -
  5. Le Web -
      -
    • 3.1 Internet et ses services
    • -
    • 3.2 Fonctionnement du Web
    • -
    • 3.3 Adressage des documents Web
    • -
    • 3.4 Le protocole HTTP
    • -
    • 3.5 HTML, le format des documents
    • -
    -
  6. -
-
-

Adressage des documents Web

-
-

Adressage des documents Web (1/3)

- - -
URL Uniform Resource Locator - identifie un document sur internet
-

Une URL se décompose en 3 partie

- -

Syntaxe (simplifiée) :

- protocole://adresse/document -

Exemple :

- http://www.lri.fr/~kn/teach_fr.html -
- -
-

Adressage des documents Web (2/3)

-

On peut aussi préciser un numéro - de port, des paramètres - et un emplacement : -

- protocole://adresse:port/document?p1=v1&p2=v2#empl -

Exemple :

- http://www.youtube.com:80/results?search_query=tbbt#search-results -

Le serveur utilise les paramètres passés par le client dans - l'URL pour calculer le contenu de la page (changer la - chaîne « tbbt » ci-dessus et essayer)

-
-
-

Adressage des documents Web (3/3)

-

- La racine d'un site Web - (ex: http://www.lri.fr/) correspond - à un répertoire sur le disque du serveur - (ex: /var/www). Le fichier

- http://www.lri.fr/index.html -

se trouve à l'emplacement

- /var/www/index.html -

Le serveur Web peut aussi effectuer des réécritures - d'adresses :

- http://www.lri.fr/~kn/index.html -

devient

- /home/kn/public_html/index.html -
- -

Le protocole HTTP

-
-

Plan

-
    -
  1. Systèmes d'exploitation
  2. -
  3. Réseaux et Internet
  4. -
  5. Le Web -
      -
    • 3.1 Internet et ses services
    • -
    • 3.2 Fonctionnement du Web
    • -
    • 3.3 Adressage des documents Web
    • -
    • 3.4 Le protocole HTTP
    • -
    • 3.5 HTML, le format des documents
    • -
    -
  6. -
-
- -
-

Caractéristiques du protocole HTTP

- -
-
-

Format des messages HTTP

-

Les messages ont la forme suivante

- - -
-
-

Démo

-
-

HTML, le format des documents

-
-

Plan

-
    -
  1. Systèmes d'exploitation
  2. -
  3. Réseaux et Internet
  4. -
  5. Le Web -
      -
    • 3.1 Internet et ses services
    • -
    • 3.2 Fonctionnement du Web
    • -
    • 3.3 Adressage des documents Web
    • -
    • 3.4 Le protocole HTTP
    • -
    • 3.5 HTML, le format des documents
    • -
    -
  6. -
-
-
-

HTML

-

- HyperText Markup Language : langage de mise en forme - de documents hypertextes (texte + liens vers d'autres - documents). Développé au CERN en 1989.
- 1991 : premier navigateur en mode texte
- 1993 : premier navigateur graphique (mosaic) - développé au NCSA (National Center for Supercomputing - Applications) -

-
-
-

Document HTML

- -
- - - - - - - - -
Exemple Rendu par défaut
en gras ]]>Un - texte en gras
Un lien ]]>Un lien
-
  • Premièrement
  • -
  • Deuxièmement
  • - ]]>
      -
    • Premièrement
    • -
    • Deuxièmement
    • -
    -
    -
    -

    On dit que ]]> est une balise - ouvrante et ]]> une - balise fermante. On peut - écrire ]]> comme raccourci pour - ]]>. -

    -
    -
    -

    Historique du langage HTML

    - - - - - - - - -
    1973 GML, Generalised Markup Language développé chez -IBM. Introduction de la notion de balise.
    1980 SGML, Standardised GML, adopté par l'ISO
    1989 HTML, basé sur SGML. Plusieurs entreprises (microsoft, -netscape, ... ) interprètent le standard de manière -différente
    1996 XML, eXtensible Markup Language norme pour les -documents semi-structurés (SGML simplifié)
    2000 XHTML, version de HTML suivant les conventions - XML
    2008 Première proposition pour le nouveau standard, - HTML5
    2014Standardisation de HTML5
    -
    - -
    -

    XHTML vs HTML

    -

    On utilise XHTML dans le cours. Différences avec HTML:

    - -

    Les avantages sont les suivants

    - -
    -
    -

    Rôle d'(X)HTML

    -

    Séparer la structure du document de - son rendu. La structure donne une sémantique au - document :

    - -

    Cela permet au navigateur d'assurer un rendu en fonction de la - sémantique. Il existe différents types de rendus:

    - -
    -
    -

    Exemple de document

    -

    (liste des balises - données sur la feuille de TD 4!)

    -
    - - - - Un titre - - - -

    Titre de section

    -

    premier paragraphe de texte. On met - un lien ici. -

    - - - ]]>
    -
    -
    - - diff --git a/prog_internet/prog_internet_05.xhtml b/prog_internet/prog_internet_05.xhtml deleted file mode 100644 index 3c32ca0..0000000 --- a/prog_internet/prog_internet_05.xhtml +++ /dev/null @@ -1,489 +0,0 @@ - - - - - CSS - - - - - - - - - - - - - - - - - - - - -
    -

    Programmation Internet

    -

    Cours 5

    -
    kn@lri.fr
    - http://www.lri.fr/~kn -
    -

    Introduction

    -
    -

    Cascading Style Sheets (CSS)

    - - - - -
    CSS - Langage permettant de décrire le style graphique - d'une page HTML -
    -

    On peut appliquer un style CSS

    - -
    -
    -

    L'attribut style

    - color:redUn lien]]> - -

    Apperçu:

    -

    - Un lien -

    -

    Inconvénients :

    - -
    - -
    -

    L'élément style

    - - - … - - - - Lien 1 Lien 2 - - ]]> -

    Apperçu :

    -

    - Lien - 1 - Lien 2 - -

    -

    Inconvénient : local à une page

    -
    -
    -

    Fichier .css séparé

    -

    Fichier style.css:

    -

    - a { color: red; } -

    -

    Fichier test.html:

    -

    - - - … - ]]><link href="style.css" type="text/css" rel="stylesheet" /> - - … - ]]> -

    -

    Modifications & déploiement aisé

    -
    -
    -

    Syntaxe

    -

    Une propriété CSS est définie en utilisant la - syntaxe: -

    -

    nom_prop : val_prop - ;

    - -
    -

    Boîtes

    -
    -

    Unités de longueur

    -

    CSS permet de spécifier des longueurs comme valeurs de - certaines propriétés (position et taille des éléments, épaisseur - des bordures, …). Les longueurs doivent comporter une - unité. Les unités reconnues sont:

    - - - - - - - - - - - - -
    px pixel
    in pouce (2,54cm)
    cm centimètre
    mm millimètre
    pt point (1/72ème de pouce, 0,35mm)
    pc pica (12 points)
    em facteur de la largeur d'un caractère de la police - courante
    ex facteur de la hauteur d'un caractère « x » - de la police courante
    % pourcentage d'une valeur particulière - (définie par propriété)
    vh viewport height (% de la - hauteur de la partie visible de la page)
    vw viewport - width (% de la largeur de la partie visible de la - page)
    -
    - - -
    -

    Boîte

    - -

    Chaque élément de la page HTML possède une boîte - rectangulaire qui délimite le contenu de l'élément: -

    -
    - ← width →
    - margin (marge)
    - - border (bordure)
    - - padding (ajustement)
    - - Lien 1 - - -
    -
    -
    -
    ↑



    - height



    ↓ -
    -
    - -

    La taille t du contenu est calculée pour que:
    - (height|width) = padding + margin + border + t -

    -
    -
    -

    Marge, bordure, ajustement

    -

    On peut spécifier jusqu'à 4 valeurs:

    - - span { - padding:10pt 20pt 5pt 0pt; - margin:10pt 5pt; - border-width:3pt; - border-color:red blue green; - border-style:solid dotted; - } -
    Du texte dans une boite -
    -
    -
    -

    Modes d'affichage

    -

    La propriété display contrôle le mode - d'affichage d'un élément: -

    - - - - - - -
    nonel'élément n'est pas dessiné et n'occupe - pas d'espace
    inlinel'élément est placé sur la ligne - courante, dans le flot de texte. La taille du contenu (avec - les marges, ajustements et bordures) dicte la - taille de la boîte, height et width sont - ignorés (, , , , …]]> - sont inline par défaut).
    blockl'élément est placé seul sur sa - ligne. La taille est calculée automatiquement mais peut être - modifiée par width et height - (,

    ,

    , …]]> - sont block par défaut)

    inline-blockpositionné comme inline - mais la taille peut être modifiée comme pour block
    -
    -
    -

    Modes d'affichage (exemples)

    -
    -
    - a { display: inline; … } -
    -
    - Le lien 1, - le lien 2 et - le lien 3. -
    -
    -
    -
    - a { display: block; … } -
    -
    - Le lien 1, - le lien 2 et - le lien 3. -
    -
    -
    -
    - a { display: inline-block; - width: 4em; - height: 2em; - … } -
    -
    - Le lien 1, - le lien 2 et - le lien 3. -
    -
    -
    -
    -

    Positionnement

    -

    Le type de positionnement est donné par la - propriété position

    - - - - - -
    staticpositionnement « automatique - »
    fixedpositionnement par rapport à la fenêtre - du navigateur (la boîte est supprimée du flot)
    relativepositionnement « relatif » par - rapport à la position normale
    absolutepositionnement « absolu » par rapport - à l'ancêtre le plus proche qui n'est pas static
    -

    Pour fixed, relative et absolute, - les propriétés top, bottom, left - et right dénotent les décalages respectifs. -

    -
    -
    -

    Positionnement (exemple)

    -
    -
    - a { position: static; - … } - a { position: fixed; - right:10pt; - top: 10pt; - }
    -
    - a { position: relative; - left: 10pt; - bottom: -5pt; - … } - a { position:absolute; - right:0pt; - bottom: 10pt; - } -
  • …
  • …]]>
    -

    - -
    -

    Autres propriétés

    -
    -

    Couleurs

    -

    Les couleurs peuvent être données:

    - -
    -
    -

    Propriétés du texte

    -

    Certaines propriétés permettent d'alterer le rendu du texte - d'un élément

    - - - - - - -
    directionltr ou rtl - (orientation du texte)
    text-transform capitalize, uppercase, lowercase -
    text-decoration underline, overline, line-through
    text-align left, right, center, justify
    text-indent longueur du retrait de paragraphe
    -
    -
    -

    Propriétés de la police

    - - - - - -
    font-familyliste de nom de polices séparées - par des virgules (Helvetica, sans, "Times New Roman")
    font-style normal, italic
    font-weight normal, lighter, bold, bolder
    font-size soit une longueur - soit xx-small, x-small, small, medium, - large, x-large, xx-large -
    -

    On peut aussi spécifier un descripteur de - police

    - - @font-face { - font-family: Toto; - src: url(toto.ttf); - } - a { font-family: Toto; } - -
    -

    Selecteurs

    -
    -

    Selecteurs

    -

    On peut sélectionner finement les éléments auxquels un style - s'applique

    - - - - - - - - - -
    xtous les éléments dont la balise - est x
    .foo tous les éléments dont - l'attribut class vaut foo
    #fool'élément dont l'attribut - id vaut foo (les id doivent être uniques)
    X Y tous les éléments - selectionnés par Y qui sont des descendants d'éléments - sélectionnés par X
    X > Y tous les éléments dont - selectionné par Y qui sont des fils d'éléments - sélectionnés par X
    a:visitedles liens déjà - visités
    a:linkles liens non - visités
    X:hoverélément selectionné - par X et survollé par la souris
    - div.foo ul li a:visited { color: red; } -
    - - diff --git a/prog_internet/prog_internet_06.xhtml b/prog_internet/prog_internet_06.xhtml deleted file mode 100644 index 892c59a..0000000 --- a/prog_internet/prog_internet_06.xhtml +++ /dev/null @@ -1,510 +0,0 @@ - - - - - PHP : Introduction - - - - - - - - - - - - - - - - - - - - -
    -

    Programmation Internet

    -

    Cours 6

    -
    kn@lri.fr
    - http://www.lri.fr/~kn -
    - -

    Introduction et généralités

    - -
    -

    Avant PHP

    -

    Constat: besoin de pages Web dynamiques (contenu - généré au chargement de la page)
    - Première solution: scripts (ou programmes) CGI
    - http://www.example.com/foo.cgi?sort=alpha -

    -
      -
    1. Programme écrit dans n'importe quel langage et exécuté par - le serveur Web
    2. -
    3. Le serveur passe les infos au programme par - des variables d'environnement et l'entrée - standard
    4. -
    5. Le programme génère une page Web par affichage sur la - sortie standard
    6. -
    -

    Inconvénients

    -
      -
    1. Communication difficile entre le serveur Web et le - programme
    2. -
    3. Les langages généralistes ne sont pas faits pour le - Web (pas de support d'HTML nativement par exemple)
    4. -
    -
    - -
    -

    PHP (Avantages)

    - -

    Exemple: fichier heure.php :

    - Heure - -

    L'heure

    -

    Il est ]]><?php echo date('H:i:s'); ?> - - ]]> -

    -
    -

    PHP

    - -
    -
    -

    Principe

    - -
    - - Heure - -

    L'heure

    -

    Il est ]]>15:53:00 - - ]]> -

    -
    - -
    -

    PHP (inconvénients)

    -
    1. Génère du HTML via echo (débuggage - difficile)
    2. -
    3. Interprété : problème de performances si beaucoup de - clients
    4. -
    5. NON TYPÉ : C'est - HORRIBLE
    6. -
    -

    Devinette : qu'affiche l'instruction suivante ? (on ne - connaît pas encore PHP mais on peut utiliser son intuition)

    - echo 013 + "013 c'est en fait 11 en base 8"; - -
    -

    Types de base et expressions simples

    -
    -

    Entiers (integer)

    -

    Les entiers ont une taille fixe (généralement 32bits) :

    - - - - - -
    Notation décimale10, 3444, -25, 42, - …
    Notation binaire0b10, -0b10001010, - …
    Notation octale0755, -01234567, …
    Notation hexadécimale0x12b, -0xb00b5, - 0xd34db33f, …
    -

    Opérateurs arithmétiques :

    - - - - -
    - « Moins » unaire
    +, -, *, % addition, soustraction, produit, modulo
    /Division. Si - x et y sont des entiers et que y - divise x alors x/y renvoie - un entier sinon x/y renvoie - un flottant! -
    -
    -
    -

    Booléens (boolean)

    - - -
    TRUE/FALSEvrai/faux (en majuscules)
    -

    Opérateurs logiques :

    - - - -
    ! négation (unaire)
    &&, || « et » logique, « ou » logique
    -
    -
    -

    Flottants (float)

    - - -
    Notation scientifique1.3, 0.99, 00.34e102, -2313.2313E-23, - …
    -

    Opérateurs arithmétiques :

    - - - - -
    - « Moins » unaire
    +, -, *, /, % opérations standard
    abs, sin, cos, sqrt, pow, …fonctions - mathématiques pré-définies
    -
    -
    -

    Variables, affectations

    - -

    Exemples :

    - $foo = 123; - $bar = 1323e99; - $_toto = $bar; - -
    -
    -

    Chaînes de caractères (string)

    - - - -
    Simples quotes 'foo', 'c\'est - moi', 'Un antislash : \\', …
    - Pas d'autre séquence d'échappement -
    Doubles quotes"foo", "c'est - moi", "Un retour chariot: \n", "La variable - \$toto contient: $toto"
    - Les séquences d'échapement sont: - \n, \t, \\, \", \$. Les variables (sous-chaînes - commençant par un $) sont remplacées par leur valeur. - -
    -

    Opérations sur les chaînes :

    - - - - - -
    $foo[10] accès au 11ème caractère
    $foo[10] = 'A'; mise à jour
    . concaténation
    strlenlongueur
    -
    -
    -

    Tableaux (array)

    -

    Les tableaux sont des tableaux associatifs :

    - - - - - - - - -
    array()crée un tableau vide
    array(k1 => v1, …, - kn => vn )créé un nouveau tableau pour lequel - l'entrée ki est associée à la - valeur vi -
    array(v1, …, vn )créé un nouveau tableau pour lequel - l'entier i-1 - valeur vi -
    -

    Quelques fonctions :

    - - - - - -
    count taille du tableau (nombre d'éléments)
    sort, rsort trie un tableau (rsort trie par - ordre décroissant) par valeurs. Les clés sont supprimées et - de nouvelles clées de 0 à longueur - 1 sont crées
    ksort, krsorttrie un tableau par - clés
    print_raffiche un tableau (ne pas utiliser echo)
    -
    -
    -

    Tableaux (exemples)

    - $tab1 = array(); //tableau vide - $tab2 = array("zero", "un", "deux", "trois"); - $tab3 = array("pi" => 3.14159, "e" => 2.71828; "phi" => 1.61803); - echo $tab2[0]; //affiche zero - echo $tab3["phi"]; //affiche 1.61803 - $tab1["dix"] = 10; //affectation - sort($tab2); - echo $tab2[0];//affiche deux - sort($tab3); - echo $tab3[0]; //affiche 1.61803 - echo $tab3[1]; //affiche 2.71828 - echo $tab3[2]; //affiche 3.14159 - echo count($tab2); //affiche 4 -
    -
    -

    NULL

    -

    NULL est une constante spéciale, de - type NULL. C'est la valeur d'une variable non déclarée - ou d'un accès invalide dans un tableau.

    - $a = $b; // $b n'est pas déclarée, $a reçoit NULL - $c = $tab["toto"]; // $tab existe mais n'a pas de valeur - // associée à la clé "toto", $c reçoit NULL - -
    -
    -

    Conversions de types

    -

    ☠☢☣☹ : -les conversions se - font implicitement, en fonction du - contexte. -

    - - - - - -
    Booléen 0, 0.0, "", "0", NULL, et le tableau - vide sont convertis en FALSE, le reste - en TRUE (en particulier "00" vaut TRUE - ☹)
    Entier FALSE ⇝ 0, TRUE ⇝ 1, - les flottants sont arrondis par partie entière (1.23242 ⇝ - 1). Les chaînes dont un préfixe - est un entier sont converties en cet entier, sinon en 0 ("123 - bonjour" ⇝ 123)
    Chaîne La chaîne contient la représentation - de la valeur ( 1 . "ABC" - ⇝ "1ABC"). FALSE et NULL sont - convertis en "", TRUE converti en "1"
    -

    La réponse à la devinette : 013 + "013 c'est 11 en octal" :

    - - -
    -
    -

    Comparaisons

    -

    Opérateurs de comparaisons

    - - - - - - - - - - -
    Opérateur Description
    $a == $b Égal, après conversion - de type
    $a != $b Différent, après conversion - de type -
    $a === $b Égal et de même type -
    $a !== $b Différent ou de type différent -
    $a < $b Strictement plus petit, - après conversion de type -
    $a > $b Strictement plus grand, - après conversion de type -
    $a <= $b Plus petit, - après conversion de type -
    $a >= $b Plus grand, - après conversion de type -
    -

    On comparera TOUJOURS des valeurs - de MÊME TYPE

    -
    -
    -

    Affichage

    -

    On utilise l'instruction echo pour écrire - du texte dans la page HTML résultante :

    - - - - - - - - - - - - - - - - - -
    Code PHPCode HTMLAffichage dans le navigateur
    echo "Hello";
    - echo "World";
    HelloWorldHelloWorld
    echo "Hello\n";
    - echo "World";
    Hello
    World
    Hello World
    echo "Hello<br/>";
    - echo "World";
    Hello<br/>WorldHello
    World
    -
    -

    Structures de contrôle

    -
    -

    Conditionnelle: if else

    - - if ( c ) { - // cas then - } else { - // cas else - }; - -

    Les parenthèses autour de la condition c sont - obligatoires. La branche else { … } est - optionnelle. Les accolades sont optionnelles pour les blocs - d'une seule instruction

    -
    -
    -

    Boucles

    -
    - while ( c ) { - //corps de la boucle while - }; -
    -
    - - do { - //corps de la boucle do - } while ( c ); -
    - -
    - - for(init ; test ; incr) { - //corps de la boucle for - }; -
    -
    - - foreach($tab as $key => $val) { - //corps de la boucle foreach - //$tab est un tableau, $key une clé et $val la valeur associée - }; -
    -

    Remarque: ksort et krsort influencent - l'ordre de parcours par une boucle foreach

    -
    -
    -

    break et continue

    - - - - - -
    breaksort de la boucle - immédiatement
    continue reprend à l'itération - suivante
    - - for($i = 0; $i < 10; $i = $i + 1){ - if ($i == 2 || $i == 4) continue; - if ($i == 7) break; - echo $i . ' '; - } - -

    Affiche 0 1 3 5 6

    -
    -

    Passage de paramètres depuis une page

    -
    -

    Formulaire HTML (version simple)

    -

    L'élément <form> permet de créer des formulaires HTML. Un -formulaire est constitué d'un ensemble de widgets (zones de saisies -de textes, boutons, listes déroulantes, cases à cocher, ... ) et d'un -bouton submit. Lorsque l'utilisateur appuie sur le bouton, les -données du formulaires sont envoyées au serveur. Exemple, fichier -age.html :

    - - -
    - Entrez votre année de naissance: - -
    - - - ]]>
    -
    -
    -

    Paramètres

    -

    - Les paramètres envoyés au serveur web par la méthode get, sont - accessibles en PHP dans la variable globale $_GET. C'est un tableau - qui associe au nom d'un input sa valeur. - Exemple : calcul.php

    - - - "; - echo date("Y") - ]]>$_GET["val_age"] ans"; - echo "
    "; - ?> - - - ]]>
    -
    - - - diff --git a/prog_internet/prog_internet_07.xhtml b/prog_internet/prog_internet_07.xhtml deleted file mode 100644 index 73d92d1..0000000 --- a/prog_internet/prog_internet_07.xhtml +++ /dev/null @@ -1,457 +0,0 @@ - - - - - PHP : Fonctions - - - - - - - - - - - - - - - - - - - - -
    -

    Programmation Internet

    -

    Cours 7

    -
    kn@lri.fr
    - http://www.lri.fr/~kn -
    - -

    Définitions de fonctions

    - -
    -

    Fonctions

    -

    Les fonctions sont déclarées à l'aide du - mot-clé function. On renvoie des résultats à - l'aide du mot-clé return.

    - function double ($x) - { - return $x + $x; - } - - echo double(10); - ]]> - -
    - - -
    -

    Portée des variables locales et globales - -

    -
    -
    - <?php - $a = 42; - function add_a($x) - { - - return $x + $a; - } - echo add_a(10); - ?> - -
    -
    - <?php - $a = 42; - function add_a($x) - { - global $a; - return $x + $a; - } - echo add_a(10); - ?> - -
    -
    - - -

    Le code de gauche affiche 10 ! - Les variables ont une portée locale - par défaut. Si $a n'est pas définie dans le corps de la - fonction, sa valeur est NULL - (variable non définie). Pour référencer - des variables globales, on utilise le mot clé global. -

    -
    -
    -

    Fonction : définition

    -

    On peut utiliser une fonction « avant » de la définir :

    - <?php - echo next(10); - echo <br/>; - - function next($x) - { - return $x + 1; - } - ?> -

    On définira toujours des fonctions avant de - les utiliser. On ne peut pas définir deux fonctions avec le même - nom. -

    -
    -
    -

    Fonctions : passage par référence

    -

    On utiliser le modificateur & devant - un paramètre de fonction pour indiquer que ce dernier est passé - par référence.

    -
    -
    - <?php - function add_a($tab) - { - $tab["a"] = 42; - } - - $mytab = array(); - add_a($mytab); - echo $mytab["a"]; - //n'affiche rien (car NULL ⇝ "") -?> -
    -
    - <?php - function add_a(&$tab) - { - $tab["a"] = 42; - } - - $mytab = array(); - add_a($mytab); - echo $mytab["a"]; - //affiche 42 -?> -
    - -
    -

    Lorsque l'on veut modifier un argument de la - fonction (plutot que de renvoyer une version modifiée, par - ex. mise à jour d'un tableau, d'une chaîne, …), on doit le - passer par référence. -

    -
    -

    Manipulation des chaînes et expressions régulières

    -
    -

    Quelques fonctions utilitaires sur les chaînes

    -
    -
    explode($delim, $entree)
    -
    Découpe la chaîne $entre -e suivant la - sous-chaîne $delim et renvoie les morceaux dans un - tableau.
    -
    implode($delim, $tab)
    -
    Réunit les chaînes se trouvant dans le - tableau $tab en les séparant par la - chaîne $delim. -
    -
    ltrim($entree)
    -
    Retire les caractères blancs en début de chaîne.
    -
    rtrim($entree)
    -
    Retire les caractères blancs en fin de chaîne.
    -
    trim($entree)
    -
    Retire les caractères blancs en début et en fin de - chaîne.
    -
    htmlspecialchars($entree)
    -
    converti les caractères &, ", - ', < et > en - &amp;, &quot;, - &apos;, &lt; et &gt;. -
    - -
    -
    -
    -

    Expressions régulières : syntaxe

    -

    Les expressions régulières de PHP sont au format PCRE (Perl - Common Regular Expressions) '/r/' - où r est une expression de la forme:

    - - - - - - - - - - - - - - - - - -
    r ::= a (un caractère)
    | . (n'importe quel caractère)
    | r1 | r2 (r1 ou r2)
    | r? (r répétée au plus 1 fois)
    | r* (r répétée 0 fois ou plus)
    | r+ (r répétée 1 fois ou plus)
    | [c1 … cn] (un caractère parmis c1, …, cn)
    | [c1-cn] (un caractère parmis c1, …, cn)
    | [^c1 … cn] (un caractère sauf c1, …, cn)
    | [^c1-cn] (un caractère sauf c1, …, cn)
    | ^ (début de texte)
    | $ (fin de texte)
    | (r) (r elle même)
    -
    -
    -
    -

    Expressions régulières : recherche

    - preg_match($regexp, $chaine) -

    renvoie 1 si une sous-chaine de $chaine - correspond à $regexp, 0 si aucune sous-chaine ne correspond - et FALSE en cas de problème (attention, - utiliser === pour tester le résultat). -

    -<?php - $chaine = "ABCDEFABCDEF"; - echo preg_match('/ABC/', $chaine); // affiche 1 - echo preg_match('/DEF/', $chaine); // affiche 1 - echo preg_match('/^ABC/', $chaine); // affiche 1 - echo preg_match('/^DEF/', $chaine); // affiche 0 - echo preg_match('/ABC$/', $chaine); // affiche 0 - echo preg_match('/DEF$/', $chaine); // affiche 1 - echo preg_match('/(ABC...)+/', $chaine); // affiche 1 - echo preg_match('/[^A-Z]+/'); // affiche 0 - echo preg_match('/[^A-Z]*/'); // affiche 1 ! - echo preg_match('/^[^A-Z]*$/'); // affiche 0 -?> -
    -
    -

    Expressions régulières : substitution

    - preg_replace($regexp, $motif, $chaine) -

    recherche toutes les sous-chaînes de $chaine reconnues - par $regexp et les remplace par $motif. Ce dernier - peut contenir $i pour référencer - le ième groupe de parenthèses

    - <?php - $chaine = "10-31-1981"; - $reg1 = "/([0-9]+)-([0-9]+)-([0-9]+)/"; - echo preg_replace($reg1, "$2/$1/$3", $chaine); - // affiche 31/10/1981 - - $reg2 = "/1/"; - echo preg_replace($reg2, "toto", $chaine); - // affiche toto0-3toto-toto98toto - - $reg3 = "/[0-9]([0-9]*)/" - echo preg_replace($reg3, "$1", $chaine); - // affiche 0-1-981 (* déplie la regexp le plus possible) -?> -
    -
    -

    Expressions régulières : séparation

    - preg_split($regexp, $chaine) -

    renvoie un tableau des sous-chaine de $chaine séparées - par $motif (équivalent à explode pour - des $regexp constantes).

    - <?php - $chaine = "Une phrase, c'est plusieurs mots."; - print_r (preg_split("/[ ,.']+/", $chaine)); - //Affiche: - //Array ( [0] => Une [1] => phrase [2] => c [3] => est - // [4] => plusieurs [5] => mots [6] => ) -?> -
    -
    -

    Expressions régulières : recherche exhaustive

    - - preg_match_all($regexp, $chaine, &$resultat) -

    &$resultat est un tableau passé par - référence. Après l'appel, $resultat[0] contient un - tableau avec toutes les sous-chaines reconnues - et $resultat[i] contient tous les résultats reconnus par le - ième groupe de parenthèses. Renvoie le nombre de chaines - trouvées (i.e. la longueur de $resultat[0]). -

    - <?php - $res = array(); - $chaine = "ABC ACD AEF AB DEF"; - echo preg_match_all("/A([A-Z]*)/", $chaine, $res); - //Affiche 4 - print_r ($res); - /*Affiche - Array ( [0] => - Array ( [0] => ABC [1] => ACD [2] => AEF [4] => AB) - [1] => - Array ( [0] => BC [1] => CD [2] => EF [4] => B) - ) -*/?> -
    -

    Manipulation de fichiers

    -
    -

    Envoi d'un fichier au serveur (1/2)

    -

    On utilise la méthode post pour les - formulaires. Les valeurs sont envoyées dans la requête HTTP (et non - pas encodées dans l'URL)

    - - <form action="cible.php" method="post" - enctype="multipart/form-data"> - <input type="file" name="fichier" size="20"/> - <button type="sumbit">Uploader le fichier</button> - </form> - -

    Apperçu:

    - - -
    -

    Coté serveur, la variable $_FILES est - définie. $_FILES["fichier"] contient un - tableau avec des informations sur le fichier envoyé. Les autres - champs (par exemple valeur d'un champ texte) sont stockés dans la - variable $_POST (au lieu de $_GET). -

    -
    -
    -

    Envoi d'un fichier au serveur (2/2)

    -

    Étant donné un formulaire avec un champ input de - type file et de nom "fichier" on a accès aux - information suivantes:

    -
    -
    $_FILES["fichier"]["error"]
    Code d'erreur - (0 si tout c'est bien passé, > 0 si une erreur s'est produite. Les - autres champs ne sont définis que si "error" vaut 0). -
    -
    $_FILES["fichier"]["tmp_name"]
    Nom du fichier - temporaire sur le serveur où a été sauvegardé le contenu du - fichier envoyé
    -
    $_FILES["fichier"]["name"]
    Nom original du fichier
    -
    $_FILES["fichier"]["size"]
    Taille du - fichier
    -
    $_FILES["fichier"]["type"]
    Le type MIME du fichier
    -
    -
    -
    -

    Ouverture d'un fichier

    - fopen($nomfichier, $mode) -

    Ouvre un fichier dont on donne le nom avec un mode - particulier. Les modes sont: "r" - (lecture), "r+" (lecture/écriture), - "w" (écriture), - "w+" (lecture/écriture, création si non-existant), - "a" (écriture, ajout à la fin si existant), - "a+" (lecture/écriture, création si non-existant, - ajout à la fin si existant). fopen renvoie un - descripteur de fichier que l'on peut utiliser pour manipuler le - fichier. -

    . -
    -
    -

    Lecture/écriture/fermeture d'un fichier

    - fread($desc, $taille) -

    Lit au maximum $taille caractères dans un fichier - dont le descripteur (renvoyé par fopen) - est $desc. La fonction renvoie un chaine d'au - plus $taille caractères ou FALSE en cas d'erreur. -

    - fwrite($desc, $chaine) -

    Écrit la chaine de caractères à la position courante dans le - fichier dont le descripteur est $desc. Renvoi le nombre - d'octets écrits ou FALSE en cas d'erreur. -

    - fclose($desc) -

    Ferme le fichier dont le descripteur est $desc -

    -
    -
    -

    Déplacement dans un fichier

    - fseek($desc, $offset, $orig) -

    Déplace le pointeur interne de position du fichier dont le - descripteur est $desc de $offset octets. Le - paramètre $orig donne l'origine: SEEK_CUR - (décalage à partir de la position courante), SEEK_SET - (position absolue dans le fichier), SEEK_END (décalage à - partir de la fin de fichier). -

    -
    -
    -

    Interface simplifiée

    - file_get_contents($nomfichier) -

    Ouvre un fichier dont on donne le nom et renvoie son contenu sous - forme d'une chaine de caractères

    - file($nomfichier) -

    Renvoie un tableau avec une case par ligne dans le fichier. Chaque - entrée contient le "\n" terminal.

    -
    - - - diff --git a/prog_internet/prog_internet_08.xhtml b/prog_internet/prog_internet_08.xhtml deleted file mode 100644 index 9bf82b5..0000000 --- a/prog_internet/prog_internet_08.xhtml +++ /dev/null @@ -1,397 +0,0 @@ - - - - - PHP : Sessions et persistance - - - - - - - - - - - - - - - - - - - - -
    -

    Programmation Internet

    -

    Cours 8

    -
    kn@lri.fr
    - http://www.lri.fr/~kn -
    - -

    En-tête de requêtes HTTP

    - -
    -

    Retour sur le protocole HTTP

    - -
    - -
    -

    Retour sur le protocole HTTP (2)

    - -
    -
    -

    Modifier le content-type en PHP

    -

    Fichier notes_csv.php:

    - <?php - header('Content-type: application/csv'); - header('Content-Disposition: attachement; filename="notes.csv"'); - echo "Nom, Note\n"; - foreach ($NOTES as $nom => $note) - echo $nom . ", " . $note . "\n"; - - ?> -

    ⚠ Attention!

    - -
    - -
    -

    Quelques en-tête utiles

    -

    En tête utilisés par le serveur dans ses réponses

    -
    -
    Content-type
    type MIME du contenu envoyé par le - serveur
    -
    Content-Disposition
    permet de mentionner un nom de - fichier : attachment; filname="foobar.baz"
    -
    Cache-Control
    permet de forcer le client à - retélécharger la page: no-cache, must-revalidate -
    -
    Last-Modified
    date de dernière modification du - contenu demandé
    -
    -

    En tête utilisés par le client dans ses requêtes

    -
    -
    Range
    permet de ne récupérer qu'un intervale - d'octets donné dans un fichier: bytes=500-999 -
    - … -
    - -
    -
    -

    Retour sur le protocole HTTP (3)

    -

    On rappelle que HTTP est un protocole stateless - (sans état, i.e. le serveur Web ne conserve pas d'information - entre les connexions). Quel problème cela pose-t-il ?

    - -

    ⇒ difficle de réaliser une « application » - moderne répartie sur plusieurs pages

    -
    - -

    Cookies

    -
    -

    Cookies

    -

    Un cookie est un packet de données envoyé par le - serveur, stocké par le client (navigateur Web) et renvoyé au serveur - lors d'une nouvelle connexion. Les propriétés d'un cookie sont: -

    -
    -
    Son nom
    une chaîne de caractères
    -
    Sa valeur
    une chaîne de caraceres
    -
    Sa durée de vie
    jusqu'à la fin de la « session » ou pour - une période donnée
    -
    Son domaine
    Le nom du site web émetteur du cookie
    -
    Son chemin
    Le sous-répertoire (par rapport à la racine - du site) pour lequel le cookie est valide
    -
    -

    ⚠ Attention! seul le domaine qui a - déposé le cookie est capable de le relire

    -
    -
    -

    Cookies en PHP

    -

    Créer ou mettre à jour un cookie sur le client:

    - - setcookie($nom, $val, $date); - -
    -
    $nom
    nom du cookie
    -
    $val
    valeur du cookie
    -
    $date
    date d'expiration en secondes - depuis epoch (1er janvier 1970 00:00:00) - ou NULL pour une expiration automatique.
    -
    -

    (on peut récupérer le nombre de secondes depuis epoche avec - la fonction time()).
    - Exemple: -

    - setcookie("mon_cookie", "42", time() + 3600 * 24 * 30); -
    - -
    -

    Cookies en PHP

    -

    On peut récupérer la valeur d'un cookie depuis PHP: -

    - $_COOKIE["mon_cookie"] -

    Un cookie "foo" existe (i.e. a été défini - auparavant) si une entrée correspondante existe dans le tableau - global $_COOKIE. On peut tester qu'une entrée - existe dans un tableau avec isset(). -

    -

    ⚠ Attention!

    - -
    - -
    -

    Avantages et inconvénients des cookies

    - -
    -

    Sessions

    -
    -

    Sessions

    -

    Une session HTTP est un ensemble de requêtes/réponses HTTP - entre un serveur et un même client.
    - Exemple d'un sondage en ligne: -

    -
    1. Le visiteur arrive sur la page q1.php en cliquant sur - le lien « commencer le sondage » (Début de session) -
    2. -
    3. Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie - sur un boutton de soumission qui l'envoie sur q2.php -
    4. -
    5. …
    6. -
    7. Sur q10.php, l'utilisateur coche des choix dans un - formulaire et appuie sur un bouton de soumission qui l'envoie - sur resultat.php
    8. -
    9. Sur resultat.php, le résultat global du sondage (% - par question, nombre de participants jusqu'à présent etc...) est - affiché (Fin de session) -
    10. -
    - -
    -
    -

    Variables de session

    -

    Pour programmer une application Web, on souhaîte avoir accès à - des variables de session c'est à dire des variables qui - sont: -

    - -

    Les variables de sessions sont donc propres à chaque client et - persistent le temp de la session (le temps de session est décidé par - le serveur)

    -
    -
    -

    Variables de session en PHP

    -

    On initie une session avec la fonction:

    - session_start(); -

    Une fois appelée, la variable $_SESSION - contient un tableau que l'on peut utiliser entre plusieurs - pages. Les valeurs contenues dans le tableau persistent jusqu'à la - fin de la session. Une session se termine: -

    - -

    ⚠ - Attention! session_start() doit être appelé - avant le premier echo du fichier.

    -
    -
    -

    Variables de session en PHP (2)

    - - <?php /* Fichier page1.php */ - session_start(); - $_SESSION["Valeur"] = 42; - ?> - - - Veuillez cliquer sur le "page2.php"lien - - -]]> - - - La valeur est echo $_SESSION["Valeur"]; - - - -]]> -
    -
    -

    Avantages et inconvénients des session

    - -
    -
    -

    Sessions PHP: détails d'implantation

    -
    -
    Coté client
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -Connexion à une page PHP (envoie du cookie ("php_ssid", "12345")) - - -
    -
    Coté serveur (PHP)
    - session_start();
    - - génération d'un ID unique "12345"
    - - dépot d'un cookie "php_ssid", valeur "12345", durée 10 minutes - - création dans un tableau global d'une entrée:
    - $_GLOBAL["12345"] = Array();
    -
    - $_SESSION = $_GLOBAL[$_COOKIE["php_ssid"]] -
    -
    -
    - -
    -

    Dans la vraie VieTM

    -

    Mélange de variables de sessions, cookies et bases de données.
    - Scénario réaliste: site de commerce en ligne -

    - -

    Pourquoi ?

    - - -
    - - - diff --git a/prog_internet/prog_internet_09.xhtml b/prog_internet/prog_internet_09.xhtml deleted file mode 100644 index d2166a9..0000000 --- a/prog_internet/prog_internet_09.xhtml +++ /dev/null @@ -1,500 +0,0 @@ - - - - - Notions de sécurité sur le Web - - - - - - - - - - - - - - - - - - - - -
    -

    Programmation Internet

    -

    Cours 9

    -
    kn@lri.fr
    - http://www.lri.fr/~kn -
    - -

    Faiblesses d'HTTP

    - -
    -

    Disclaimer

    - -

    Ça ne va pas faire de vous des hackers, - juste vous sensibiliser aux problèmes de sécurité… -

    -
    - -
    -

    Élements de cryptographie (1)

    -

    Alice et Bob veulent échanger des données - confidentielles.

    -
      -
    1. 1. Chiffrement symétrique: -
        -
      • - Ils se mettent d'accord sur une clé commune -
      • -
      • Alice chiffre son message avec la clé et - l'envoie à Bob
      • -
      • Bob déchiffre le message avec la clé -
      • -
      -

      - Non sûr (Alice et Bob doivent se mettre d'accord sur une clé en - « clair », par email par exemple) ou non pratique - (ils doivent se rencontrer physiquement pour échanger la - clé).
      - Efficace: on peut implanter plusieurs algorithmes - de chiffrements en utilisant uniquement des opérations - logiques de bases - (AND, OR, XOR). Il est facile de - les implanter sur des puces dédiées (cartes de crédit, - processeurs mobiles). Ils sont « sûrs » tant que la clé - reste secrète. -

      -
    2. -
    -
    -
    -

    Élements de cryptographie (2)

    -

    Alice et Bob veulent échanger des données - confidentielles.

    -
      -
    1. 2.  Chiffrement assymétrique: -
        -
      • Bob crée une clé - publique KBpub - et une clé - secrète KBpriv, telle - que
        - ∀msg, KBpriv(KBpub(msg)) - = KBpub(KBpriv(msg)) - = msg -
        - Bob diffuse sa clé publique (sur sa page Web - par exemple, ou dans un annuaire de clé) et garde sa clé - privée secrète. -
      • -
      • Alice chiffre son message m avec la clé - publique de Bob - (KBpub(m)) et l'envoie à Bob -
      • -
      • Bob - déchiffre le message avec sa clé - privée: KBpriv(KBpub(m))=m -
      • -
      -

      - Sûr et pratique (Bob a généré une paire de clé, et a - déposé la clé publique sur une page Web)
      - Peu efficace: repose sur des problèmes - mathématiques difficiles (factorisation de grands entiers, - courbes eliptiques sur les corps finis). Chiffrer et - déchiffrer un message n'est pas réaliste pour des grands - messages (vidéo en streaming, requêtes Web, …). -

      -
    2. -
    -
    -
    -

    Élements de cryptographie (3)

    -

    On combine les deux méthodes. (Alice envoie un message à Bob)

    - -

    Ceci est à la base de protocoles tels que HTTPS

    -
    - -
    -

    Éléments de cryptographie (4)

    -

    Le chiffrement assymétrique permet aussi d'avoir la - preuve que quelqu'un est bien Bob!

    - -

    Comment garantir que la personne qui a généré - les clés au départ est bien Bob ? -

    -
    - -
    -

    HTTP: protocole texte « en clair »

    -

    HTTP est un protocole texte, les données ne sont - pas chiffrées (cf. TP3) et sans identification

    - -
    -
    -

    Espionnage de connexion

    -

    Alice représente le client, Bob le serveur et Eve (Eavesdropper) - l'attaquante

    -

    On suppose que Eve est root sur la - machine. Il suffit de lire les paquets qui transitent par la - carte réseau (tcpdump sous Linux). -

    - -

    Ce problème touche tous les protocoles en clair: HTTP, POP, - IMAP, FTP, …. Il peut être résolu grace au chiffrement - de toute la connexion.

    -
    -
    -

    Attaque Man in the middle

    -

    Mallory se place entre Alice (cliente) et Bob (banque), par exemple au - moyen d'un e-mail frauduleux en HTML:

    -
    1. L'émail contient: - - - Bonjour, - veuillez vous connecter à votre banque en cliquant ici: - www.bob.com - -]]> -
    2. -
    3. Alice, insouciante, clique sur le lien -

      - A M B -
      -
    4. -
    5. Mallory peut retransmettre les requêtes entre Bob et - Alice, en les modifiant au passage. Le problème est causé - par un manque d'authentification (Mallory n'a pas a - prouver à Alice qu'il est Bob) -
    6. -
    -
    -
    -

    Solution: HTTPS

    -

    HTTP Secure

    -
    1. Respose sur de la cryptographie assymétrique (pour - l'authentification et le partage de clé) et symétrique (pour le - chiffrement de connexion)
    2. -
    3. Permet d'authentifier les correspondants et de protéger - les données -
    4. -
    5. Suppose l'existence de tiers de confiance Alice - et Bob font confiance à Trent (Trusted Third - Party)
    6. -
    -

    Bob possède des clés publiques et privées - (KBpub - et KBpriv), Trent possède des clés - publiques et privées (KTpub - et KTpriv) -

    -
    -
    -

    HTTPS (détail du protocole)

    -

    Bob et Trent se rencontrent. Trent signe - la clé publique de Bob en calculant -

    - SB=KTpriv(KBpub) -
    - Comme Trent utilise sa clé privée on sait que seul - Trent a pu générer cette signature. De plus, Trent - a rencontré Bob donc il certifie que la - clé KBpub appartient bien à - quelqu'un nommé Bob. -

    -
      -
    1. Alice (client) veut se connecter à Bob. Bob fournit sa - clé publique KBpub et la - signature SB
    2. -
    3. Alice contacte Trent (en qui elle a confiance) et récupère sa clé - publique KTpub. Elle déchiffre la - signature: KTpub(SB) - et vérifie qu'elle retombe bien sur la clé publique de Bob. -
    4. -
    5. Elle peut alors choisir une clé symétrique, la chiffrer - avec KBpub et entammer une - communication chiffrée et authentifiée avec - Bob.
    6. -
    -
    -
    -

    Tiers de confiance

    -

    Les tiers de confiance sont des entités (états, associations, - compagnies privées) qui se chargent de vérifier les clés - publiques d'autres entitées. C'est une - vérification physique (documents administratifs, …). -

    -
    ssl -
    -

    Cette erreur s'affiche quand une signature n'est pas conforme - ou n'a pas pu être vérifiée

    -
    - -
    -

    Tiers de confiance

    -

    Attaques contre les authorités de certifications - (tiers de confiance): difficiles, mais pas impossible. Certains - tiers de confiance sont douteux (états voyous, compagnie - piratées dont les clées privées sont compromises,…)
    - Attaques d'implémentation (plus probables) : on - exploite un bug dans le code des serveurs web ou des - navigateurs
    - Autres faiblesses: HTTPS est en « haut » dans la pile - IP (application). On peut donc avoir connaissance du nombre de - paquet échangés, des adresses IP des participants, la taille - et la fréquence des paquets… (même si on n'en connait pas le - contenu). Cela permet certaines attaques statisties ou de deni - de service. -

    -
    -

    Confidentialité, traîtement des cookies

    -
    -

    Traçage par cookies

    -

    Normalement, un cookie ne peut être - lu que que par le site émetteur (cf. cours 8). But:

    -
      -
    1. Empêcher un tiers de lire des données personnelles - (ok)
    2. -
    3. Empêcher un tiers de savoir quels sites ont été visités - (pas ok)
    4. -
    -
      -
    1. Un site B utilise des publicités pour se rémunérer. Le - site marchand M fournit du code HTML: - <script src="http://marchand.com/pub.js"/> -
    2. -
    3. A visite le site B. Le - code pub.js peut alors faire les choses suivantes: -
        -
      1. Scanner le contenu de la page de B. Possible car le - script est « inclus » dans une page fournie par B
      2. -
      3. Se connecter - àhttp://marchand.com/collecte.php et - passer en paramètre post ou get le - contenu de la récolte
      4. -
      5. http://marchand.com peut alors stocker un - cookie valide pour son domaine avec le contenu de - la récolte d'information -
      6. -
      -
    4. -
    5. - Lorsque A visite le site marchand M, ce dernier - relit son cookie et fait des propositions ciblées. -
    6. - -
    -
    -
    -

    Solutions

    -
      -
    • Désactiver les cookies de « tierce partie » (cookie dont - l'origine n'est pas celle de la page visitée) -
    • -
    • Effacer par défaut tous les cookies quand on quite le - navigateur
    • -
    • Rajouter des exceptions pour certains sites au cas par cas -
    • -
    -

    Nouveau standard du W3C en préparation pour signifier à un - site qu'on ne souhaite pas être suivi (méthode « volontariste - » qui suppose que les sites commerciaux sont gentils et - respectent le protocole)

    -
    -
    -

    Sécurité des cookies de session

    -

    On a vu que les sessions PHP (vrai aussi pour les autres - langages côté serveur) stockent dans un cookie un identifiant - unique. Que se passe-t-il si on vole ce cookie ? (démo) -

    -

    Pas d'autre solution que de faire confiance - au root (solutions partielles basées sur le chiffrement - des disques dur) -

    -
    -

    Attaques par injection de code

    -
    -

    Injection de code Javascript/HTML

    -

    Vulnérabilité: on exploite le fait qu'un site utilise - directement les entrées fournies par l'utilisateur.
    - Exemple: commentaires sur un blog. -

    -
      -
    1. Une page Web utilise un formulaire pour permettre de - poster des commentaires sur un blog: - - Commentaire:
      - ]]><textarea rows="20" cols="60" name="zonetexte"/> - -]]>
      -
    2. -
    3. Un bout de code PHP écrit le commentaire sur la page: - echo "Commentaire #$i: <p>"; - echo $_POST["zonetexte"]; - echo "</p>"; - -
    4. - - -
    -
    -
    -

    Injection de code Javascript/HTML

    - Problème tout ce qui est dans la zone de texte est copié - dans la page HTML de chaque client qui consulte la page - et interprété par son navigateur: - Debut du commentaire - <script type="text/javascript"> - ... //code javascript malicieux - </script> - Fin du commentaire - -
    -
    -

    Injection de code PHP

    -

    Problème lié à l'utilisation de la fonction - eval(command) - command est une chaîne de caractères - considérée comme étant du code PHP et eval exécute - cette chaîne: -

    - - echo eval ("1 + 2 * 3"); // affiche 7 - echo eval ('$x = 4;'); // définit la variable $x - echo $x; // affiche 4 - -

    Il ne faut jamais donner une chaine de caractère de - l'utilisateur comme argument à eval (sauf durant le - TP 9)

    -
    -
    -

    Solutions

    -
      -
    • Ne jamais utiliser eval
    • -
    • Utiliser la fonction htmlspecialchars qui - échappe les - caractères <, >, &, ', "
    • -
    • Utiliser la fonction striptags qui supprime tout - ce qui est une balise
    • -
    • Toujours valider les entrées d'un utilisateur
    • -
    -
    -
    -

    Injection de code SQL

    -

    SQL: language de requête permettant d'interroger des bases de - données. Utilisation classique depuis PHP (on suppose un - formulaire qui met dans le champ "nom" le nom d'un - étudiant): -

    - - $Q = "SELECT * FROM STUDENTS WHERE "; - $Q = $Q . "(NAME = '" . $_POST["nom"] . "');"; - mysql_query($Q); - -

    Si l'utilisateur donne comme nom « Toto », la requête envoyée - à la base est:

    - SELECT * FROM STUDENTS WHERE (NAME = 'Toto'); -

    Affiche toutes les lignes de la table STUDENTS pour - lesquel le nom est Toto

    -
    -
    -

    Jusqu'au jour où …

    -

    ©xkcd
    - -

    - SELECT * FROM STUDENTS WHERE (NAME ='Robert'); - DROP TABLE STUDENTS; --');' - - -
    -
    -

    Ou bien…

    -
    - -
    -
    - - diff --git a/prog_internet/radar.jpg b/prog_internet/radar.jpg deleted file mode 100644 index b4935e5..0000000 Binary files a/prog_internet/radar.jpg and /dev/null differ diff --git a/prog_internet/ssl-cert.png b/prog_internet/ssl-cert.png deleted file mode 100644 index 9810ad6..0000000 Binary files a/prog_internet/ssl-cert.png and /dev/null differ diff --git a/prog_internet/stat.php b/prog_internet/stat.php deleted file mode 100644 index 2b41efb..0000000 --- a/prog_internet/stat.php +++ /dev/null @@ -1,15 +0,0 @@ - - - 0) { - echo "Erreur lors de l'envoi du fichier
    \n"; - - } else { - echo "\n"; -} -?> - - \ No newline at end of file diff --git a/prog_internet/test.php b/prog_internet/test.php deleted file mode 100644 index 728f971..0000000 --- a/prog_internet/test.php +++ /dev/null @@ -1,10 +0,0 @@ - - -
    - - - - -
    - \ No newline at end of file diff --git a/prog_internet/xkcd.png b/prog_internet/xkcd.png deleted file mode 100644 index 530ddc0..0000000 Binary files a/prog_internet/xkcd.png and /dev/null differ diff --git a/unix_prog_web/cours_4.svg b/unix_prog_web/cours_4.svg new file mode 100644 index 0000000..d26b090 --- /dev/null +++ b/unix_prog_web/cours_4.svg @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + Internet + Client(Navigateur Web) + + + Serveur(programme) + + Client(Machine) + Documents + Serveur(machine) + + PHP + Java + + HTMLCSS + Javascript + + Requêtes + Réponses(pages, images, vidéos, scripts, …) + + + + + + + + diff --git a/unix_prog_web/password.html b/unix_prog_web/password.html new file mode 100644 index 0000000..5d82e83 --- /dev/null +++ b/unix_prog_web/password.html @@ -0,0 +1,10 @@ + + +
    + Username:
    + Password:
    + +
    + + diff --git a/unix_prog_web/password2.php b/unix_prog_web/password2.php new file mode 100644 index 0000000..e257b59 --- /dev/null +++ b/unix_prog_web/password2.php @@ -0,0 +1,10 @@ + + + + + diff --git a/unix_prog_web/pdf/prog_internet_05.pdf b/unix_prog_web/pdf/prog_internet_05.pdf new file mode 100644 index 0000000..9e7d20f Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_05.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_05_print.pdf b/unix_prog_web/pdf/prog_internet_05_print.pdf new file mode 100644 index 0000000..e7b8793 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_05_print.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_06.pdf b/unix_prog_web/pdf/prog_internet_06.pdf new file mode 100644 index 0000000..73bf2e5 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_06.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_06_print.pdf b/unix_prog_web/pdf/prog_internet_06_print.pdf new file mode 100644 index 0000000..251df42 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_06_print.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_07.pdf b/unix_prog_web/pdf/prog_internet_07.pdf new file mode 100644 index 0000000..15594ef Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_07.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_07_print.pdf b/unix_prog_web/pdf/prog_internet_07_print.pdf new file mode 100644 index 0000000..423e576 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_07_print.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_08.pdf b/unix_prog_web/pdf/prog_internet_08.pdf new file mode 100644 index 0000000..ca5cae4 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_08.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_08_print.pdf b/unix_prog_web/pdf/prog_internet_08_print.pdf new file mode 100644 index 0000000..0ee96d9 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_08_print.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_09.pdf b/unix_prog_web/pdf/prog_internet_09.pdf new file mode 100644 index 0000000..393ed86 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_09.pdf differ diff --git a/unix_prog_web/pdf/prog_internet_09_print.pdf b/unix_prog_web/pdf/prog_internet_09_print.pdf new file mode 100644 index 0000000..86df3a2 Binary files /dev/null and b/unix_prog_web/pdf/prog_internet_09_print.pdf differ diff --git a/unix_prog_web/radar.jpg b/unix_prog_web/radar.jpg new file mode 100644 index 0000000..b4935e5 Binary files /dev/null and b/unix_prog_web/radar.jpg differ diff --git a/unix_prog_web/ssl-cert.png b/unix_prog_web/ssl-cert.png new file mode 100644 index 0000000..9810ad6 Binary files /dev/null and b/unix_prog_web/ssl-cert.png differ diff --git a/unix_prog_web/stat.php b/unix_prog_web/stat.php new file mode 100644 index 0000000..2b41efb --- /dev/null +++ b/unix_prog_web/stat.php @@ -0,0 +1,15 @@ + + + 0) { + echo "Erreur lors de l'envoi du fichier
    \n"; + + } else { + echo "\n"; +} +?> + + \ No newline at end of file diff --git a/unix_prog_web/test.php b/unix_prog_web/test.php new file mode 100644 index 0000000..728f971 --- /dev/null +++ b/unix_prog_web/test.php @@ -0,0 +1,10 @@ + + +
    + + + + +
    + \ No newline at end of file diff --git a/unix_prog_web/unix_prog_web_01.xhtml b/unix_prog_web/unix_prog_web_01.xhtml new file mode 100644 index 0000000..5928b08 --- /dev/null +++ b/unix_prog_web/unix_prog_web_01.xhtml @@ -0,0 +1,787 @@ + + + + + Systèmes d'exploitation (1/2) + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 1

    +
    kn@lri.fr +
    + +
    +

    Contenu du cours

    +
      +
    1. Comprendre les bases du Web +
        +
      • Fonctionnement des ordinateusr Unix (cours 1 et 2)
      • +
      • Notions de réseau (cours 3 et 4)
      • +
      +
    2. +
    3. Programmer (pour) le Web +
        +
      • Pages statiques (HTML & CSS cours 5)
      • +
      • Pages dynamiques avec PHP (cours 6, 7 et 8)
      • +
      • Notions de sécurité des sites Web (cours 9)
      • +
      • Bonus (cours 10)
      • +
      +
    4. +

      Cours disponible en ligne + sur https://www.lri.fr/~kn/teaching_fr.html. Les + supports de cours seront distribués à partir de la semaine prochaine.

      +
    + +
    +
    +

    Modalités de Contrôle des Connaissances (MCC)

    +

    2 sessions:

    + +

    Rappel: + La défaillance fait obstacle au calcul de la moyenne + et implique l'ajournement. + La présence de l'étudiant étant obligatoire en TP [...], plus + d'une absence injustiée dans un enseignement peut entraîner + la défaillance de l'étudiant dans l'enseignement concerné + +

    +
    + +
    +

    Organisation

    + +
    +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation +
        +
      • 1.1 Principes des systèmes + d'exploitation
      • +
      • 1.2 Système de gestion de fichiers
      • +
      • 1.3 Système de gestion de processus
      • +
      +
    2. +
    +
    + +
    +

    Système d'exploitation

    +

    Quelques systèmes:

    + +
    + +
    +

    Système d'exploitation

    +

    Qu'est-ce qu'un système d'exploitation ?

    + +

    Quelles sont les ressources d'une machine?

    + +
    +
    +

    Système d'exploitation

    +
    +
    + Haut niveau
    + ↓
    + Bas niveau +
    +
    +
      +
    • Applications: navigateur Web, éditeur de + texte, anti-virus, jeu, compilateur, …
    • +
    • Système d'exploitation: +
        +
      • Gestion des ressources
      • +
      • Interface avec le matériel (pilotes)
      • +
      +
    • +
    • Matériel: CPU, mémoire, périphériques, …
    • +
    +
    +
    +
    +

    Le système Unix

    + + + + + + + + + + + +
    1965 MultICS: Multiplexed Information and Computing Service (Bell & MIT)
    1969 Unix: 1ère version en + assembleur (AT&T)
    1972-73 Unix réécrit en C
    1976 Invention de TCP/IP
    1977 Berkeley Software Distribution + (BSD)
    1985Unix System V
    1988Minix
    1992Linux
    +
    +
    +
    +

    Unix : architecture

    + + + + + + + + + + + + +
    + Applications +
    + Interface utilisateur + + Services +
    + Noyau (kernel) +
    + Micro-code +
    + Matériel +
    +
    +
    +
    +

    Zoom sur le noyau

    + + + + + +
    + Applications +
    + + Bibliothèques + (libc, DirectX, OpenGL, …) +
    +
    + + + + + + + +
    + Appels systèmes +
    + Noyau
    +
    + pilotes de périphériques + ordonnanceur (gestion du temps CPU)
    + gestionnaire de mémoire + système de fichier
    +
    +
    + Matériel +
    +
    +
    +

    Le Shell Unix

    + +
    +
    +

    Le Shell Unix

    +

    Exemple de session shell:

    +
    + + $ ls + Documents Downloads Public Person + $ cd Documents + $ ls + compte_rendu.txt + $ mv compte_rendu.txt cr.txt + $ ls + cr.txt + +
    +
    + +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation +
        +
      • 1.1 Principes des systèmes + d'exploitation
      • +
      • 1.2 Système de gestion de fichiers
      • +
      • 1.3 Système de gestion de processus
      • +
      +
    2. +
    +
    +
    +

    Système de gestion de fichiers (filesystem)

    + +
    +
    +

    Le concept de fichier

    +

    + Un fichier est une collection d'infromations + numériques réunies sous un même nom et + enregistrée sur un support de stockage +

    + +
    +
    +

    Le concept de fichier

    +

    Ne pas confondre:

    + +
    +
    +

    Les attributs d'un fichier

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nom +
    Propriétaireutilisateur qui possède ce fichier
    Groupegroupe d'utilisateurs qui possède ce fichier
    Emplacementlocalisation du fichier sur le support physique
    Tailleen octet (peut être la taille réelle ou la taille + occupée sur le support)
    Permissions « qui a quel droit » sur le fichier (lecture, écriture, + exécution, …) +
    Type +
    Datesdernier accès, dernière modification, création, …
    +
    +
    +

    Organisation logique des fichiers

    +

    Usuellement, les fichiers sont regroupés en répertoires. Les +répertoires sont imbriqués les uns dans les autres de manière a former +une arborescence. +

    +

    + Sous Unix il y a un répertoire racine, « / » +(slash) qui contient toute l'arborescence du système.
    +Chaque utilisateur possède aussi un répertoire personnel +

    +
    + +
    +

    Noms de fichiers et chemins

    +

    +Un chemin est une liste de répertoire à traverser pour +atteindre un fichier ou répertoire donné. +Sous Unix, le séparateur de chemin est le « / »
    +Les chemins absolus commencent par un / et + dénotent des fichiers à partir de la racine. Exemple: + + /home/kim/Documents/ProgInternet/cours01.pdf + +Les chemins relatifs dénotent des fichiers à partir du + répertoire courant. Exemple:
    + Documents/ProgInternet/cours01.pdf +si on se trouve dans le répertoire /home/kim +
    +
    +Les noms spéciaux: « . » dénote le répertoire + courant, + « .. » le répertoire parent, « ~ » le répertoire de + l'utilisateur et « ~toto » le répertoire de l'utilisateur + toto +

    +
    + +
    +

    Utilisation du Shell

    +

    + Le shell affiche un invite de commande + (prompt). Exemple:
    + kim@machine $

    + On peut alors saisir une commande:

    + kim@machine $ ls *.txt

    + Le shell affiche la sortie de la commande:

    + fichier1.txt fichier2.txt

    + Certains caractères doivent être précédés d'un « \ » (échappés):

    + kim@machine $ ls mon\ fichier\#1.txt +

    +
    +
    +

    La ligne de commande

    +

    + Une ligne de commande a la forme:
    + prog item1 item2 item3 item4 … +

    +
      +
    1. Si prog est un chemin il doit + dénoter un fichier exécutable +
    2. +
    3. Si prog est un simple nom, il doit dénoter un fichier + exécutable se trouvant dans un des répertoires prédéfinis + (/bin, /usr/bin, …) +
    4. +
    5. Pour chaque itemi (séparés par un ou plusieurs espaces + non échappés) le shell fait une expansion de nom +
    6. +
    7. La liste de toutes les chaînes de caractères expansées est + passée comme argument au programme prog +
    8. +
    +
    +
    +

    Expansion des noms
    Expressions régulières glob

    +

    + Certains caractères sont interprétés de manière spéciale par le + shell. Ces caractères sont « expansés » selon des + règles. Si la forme expansée correspond a un ou plusieurs fichiers + existants, alors leurs noms sont placés sur la ligne de commande. Sinon + la chaîne de caractère de départ garde sa valeur textuelle. +

    +
    +
    +

    Expressions régulières glob

    +

    Règles d'expansion: + * n'importe quelle chaîne
    + ? n'importe quel caractère + [ab12…] un caractère dans la liste
    + [^ab12…] un caractère absent de liste
    + [a-z] un caractère dans l'intervalle
    + [^a-z] un caractère absent de l'intervalle
    + {m1, m2} + motif m1 ou m2
    + ?(m1|…|mn) + + @(m1|…|mn) + + *(m1|…|mn) + + +(m1|…|mn)
    + k motifs parmi mi
    + ?: 0 ≤ k ≤ 1 + + @: k = 1 + + *: k ≥ 0 + + +: k ≥ 1 +
    + !(m1|…|mn): + ni m1, …, ni mn +

    +
    +
    +

    Expressions régulières glob
    Exemples

    +

    ls !(*[aeiouy]?) + La chaine « !(*[aeiouy]?) » est remplacée par la liste de tous + les fichiers dont l'avant dernière lettre du nom n'est pas une + voyelle. S'il n'y a pas de tel fichier, la chaîne + « !(*[aeiouy]?) » est passée à la commande ls.

    + + ls [0-9]* affiche la liste des fichiers commençant par un + chiffre

    + ls +(abc) affiche la liste des fichiers dont le nom est une + répétition de « abc Â». +
    +

    +
    +
    +

    Commandes shell de base

    + +
    +
    +

    Droits et propriétés des fichiers

    +

    +Sous Unix un utilisateur est identifié par son login (ou nom +d'utilisateur). Chaque utilisateur est dans un groupe + principal.
    +Chaque fichier appartient à un utilisateur et à un groupe.
    +Chaque fichier possède 3 permissions pour son propriétaire, son groupe +et tous les autres. Les permissions sont lecture, écriture, exécution +(plus d'autres non abordées dans ce cours).
    + + + + + + + + + +
    Permission fichier répertoire
    lecture (r) lire le contenu du + fichierlister le contenu du répertoire
    écriture (w) écrire dans le fichiersupprimer/renommer/créer des + fichiers dans le répertoire
    exécution + (x) exécuter le fichier + (si
    + + c'est un programme)
    rentrer dans le répertoire +
    +$ ls -l +drwxr-x--- 9 kim prof 4096 Sep 7 21:31 Documents +

    +
    +
    +

    La commande chmod

    + + chmod permissions chemin1 … cheminn + +

    modifie les permissions des fichiers 1 à n. La chaîne +permissions est soit une suite de modifications de +permissions symbolique soit l'ensemble des permissions données +de manière numérique:
    + + chmod 755 fichier.txt + chmod u-w,a+x,g=w fichier.txt + +

    +
    +
    +

    Permissions numériques

    +

    +On groupe les bits de permissions par trois puis on convertit +en décimal:
    + + + + + + + + + + + + + + +
    Utilisateur + GroupeAutres
    r w x r w x r w x
    1 1 0 1 0 0 0 0 0
    6 + 40
    +Le fichier est lisible et modifiable mais pas exécutable par son +propriétaire, lisible pour le groupe. Les autres ne peuvent ni le lire +ni le modifier.

    +
    +
    +

    Permissions symboliques

    + + cible modifieur permission + + +

    +Exemple:
    + chmod u+rw,u-x,g+r,g-wx,o-rwx fichier.txt +

    +
    +
    +

    Liens symboliques (1)

    +

    Pour des raisons d'organisation, on veut pouvoir « voir » le même + fichier ou répertoire sous deux noms différents (ou à deux endroits + différents). Par exemple: +

    + + $ ls -l Documents/Cours + total 8 + drwxr-xr-x 3 kim prof 4096 Sep 9 11:30 Licence + drwxr-xr-x 3 kim prof 4096 Sep 9 11:30 Master + + $ cd Documents/Cours/Master; ls + Compilation XMLProgInternet + + $ cd XML_Prog_Internet; ls + cours01 cours02 cours03 cours04 cours05 cours06 Prereq + + $ ls -l Prereq + lrwxrwxrwx 1 kim prof 28 Sep 9 11:30 Prereq -> ../../Licence/UnixProgWeb/ + + +
    +
    +

    Liens symboliques (2)

    +

    La commande ln permet de créer des liens + symboliques. Un lien est un petit fichier qui contient + un chemin vers un fichier de destination. +

    +

    Exemple d'utilisation

    + $ ln -s ../foo/bar/baz/toto.txt rep/titi.txt + +

    crée un lien vers le fichier toto.txt + sous le nom titi.txt (chacun placé dans des sous/sur + répertoires) +

    + +

    Cela permet de créer l'illusion que la cible a été copiée à + l'identique, sans les inconvénients

    +
    +
    +

    À propos de la suppression

    +

    La commande rm fichier efface un fichier définitivement
    + La commande rm -d rep efface un répertoire s'il est vide
    + La commande rm -r rep efface un répertoire récursivement + mais demande confirmation avant d'effacer des éléments
    + La commande rm -rf rep efface un répertoire + récursivement et sans confirmation

    +

    Toute suppression est définitive

    +

    Gag classique :

    + $ mkdir \~ + ... + $ ls + Documents Photos Musique ~ + $ rm -rf ~ + ☠ ☠ ☠ ☠ ☠ ☠ + +
    +
    +

    Obtenir de l'aide sur une commande

    +

    La commande man permet d'obtenir de l'aide sur + une commande. Lors qu'une page d'aide est affichée, on peut la faire + défiler avec les touches du clavier, la quitter avec « q » + et rechercher un mot avec la touch « / »

    + +LS(1L) Manuel de l'utilisateur Linux LS(1L) + + +NOM + ls, dir, vdir - Afficher le contenu d'un répertoire. + +SYNOPSIS + ls [options] [fichier...] + + Options POSIX : [-1acdilqrtuCFR] + + Options GNU (forme courte) : [-1abcdfgiklmnopqrstuxABCD­ + FGLNQRSUX] [-w cols] [-T cols] [-I motif] [--full-time] + [--format={long,verbose,commas,across,vertical,single-col­ + umn}] [--sort={none,time,size,extension}] + [--time={atime,access,use,ctime,status}] + [--color[={none,auto,always}]] [--help] [--version] [--] + +DESCRIPTION + La commande ls affiche tout d'abord l'ensemble de ses + arguments fichiers autres que des répertoires. Puis ls + affiche l'ensemble des fichiers contenus dans chaque + répertoire indiqué. dir et vdir sont des versions de ls + affichant par défaut leurs résultats avec d'autres for­ + mats. + + + +
    +
    +

    Recherche de fichiers

    +

    La commande find rep criteres permet de trouver + tous les fichiers se trouvant dans le répertoire rep (ou un + sous répertoire) et répondant à certains critères. Exemples de + critères :

    + +

    Comment trouver toutes les options de la commande find + ? man find

    +
    +
    +

    Quelques commandes utiles

    + +

    On verra comment composer ces commandes pour exécuter des + opérations complexes

    +
    + + diff --git a/unix_prog_web/unix_prog_web_02.xhtml b/unix_prog_web/unix_prog_web_02.xhtml new file mode 100644 index 0000000..497e323 --- /dev/null +++ b/unix_prog_web/unix_prog_web_02.xhtml @@ -0,0 +1,1119 @@ + + + + + Systèmes d'exploitation (2/2) + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 2

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation +
        +
      • 1.1 Principes des systèmes + d'exploitation ✔
      • +
      • 1.2 Système de gestion de fichiers ✔
      • +
      • 1.3 Système de gestion de processus
      • +
      +
    2. +
    +
    + +
    +

    Définitions

    + + + + + + + + + + + + + + + +
    Programme séquences d'instructions effectuant + une tâche sur un ordinateur
    Exécutable fichier binaire contenant des + instructions machines interprétables par le + microprocesseur
    Thread plus petite unité de traitement (≡ + séquence d'instructions) pouvant être ordonnancée par + l'OS +
    Processus instance d'un programme (≡ « un + programme en cours d'exécution »). Un processus est constitué + de un ou plusieurs threads.
    +
    + +
    +

    Exemple: programme

    +

    Dans un fichier « counter.c » + (attention c'est du pseudo + C)

    +
    + int count = 0; + int exit = 0; + void display() { + while (exit == 0) { + sleep (3); + printf("%i\n", count); + } + } + void listen() { + while (exit == 0) { + wait_connect(80); + count++; + } + } +
    + void main () { + run_function(display); + run_function(listen); + while (getc () != '\n') { }; + exit = 1; + return; + } +
    +
    +
    +

    Exemple: programme

    +

    Compilation
    + + gcc -o counter.exe counter.c +
    + Le fichier « counter.exe » est un + exécutable (fichier binaire contenant du code machine)
    + + ./counter.exe ← il faut la permission +x sur le fichier + +
    + Le contenu de l'exécutable est copié en mémoire et le processeur + commence à exécuter la première instruction du programme. +

    +
    +
    +

    Exemple: threads

    +
      +
    1. main
    2. +
    3. attente d'un évènement clavier + →←changement de thread +
    4. +
    5. listen
    6. +
    7. attente de connexion →←changement de thread +
    8. +
    9. display (affiche + 0 à l'écran)
    10. +
    11. attente pendant 3s → (les + 3 threads attendent un évènement externe)
      + nouvelle connexion sur le port 80 ← + réveil du thread listen +
    12. +
    13. listen + (incrémente count)
      + attente de connexion →
      + … fin des 3s
      + ← + réveil du thread display +
    14. +
    15. display (affiche + 1 à l'écran)
    16. +
    +

    Les threads partagent leur mémoire (variables communes)

    +
    +
    +

    Exemple: processus

    +

    (différence: les processus + ne partagent pas leur espace mémoire)

    +
      +
    1. Exécution de counter.exe pendant 50㎲ +
    2. +
    3. Exécution + de firefox.exe + pendant 50㎲
    4. +
    5. Exécution du processus qui dessine le bureau pendant 50 + ㎲
      …
    6. + +
    +

    C'est le gestionnaire de processus qui décide quel + programme a la main et pour combien de temps (priorité aux + tâches critiques par exemple)
    + Le système d'exploitation stocke pour chaque processus un + ensemble d'informations, le PCB (Process Control Block). +

    +
    +
    +

    Proccess Control Block

    +

    Le PCB contient:

    + +
    +
    +

    Opérations sur les processus

    + +
    +
    +

    États d'un processus

    +

    Un processus change d'état au cours de son exécution

    + + + + + + +
    Nouveau le processus est en cours de création
    Exécution le processus s'exécute
    En attente le processus attend un évènement + particulier (saisie au clavier, écriture sur le disque, + …)
    Prêt le processus est prêt à reprendre son + exécution et attend que l'OS lui rende la main
    terminé le processus a fini son exécution
    +
    +
    +

    États d'un processus

    +

    L'OS détermine et modifie l'état d'un processus:

    + +
    +
    +

    États d'un processus

    + + + + + + + + + Nouveau + Prêt + En exécution + En attente + + + + + + + + + + Terminé + + + + + mise en routepar l'ordonnanceur + interruptionpar l'ordonnanceur + attente E/Sinterruption + fin E/Sint. traitée… + terminaisonnormale + terminaisonanormale + + + +
    +
    +

    La commande ps

    +

    Permet d'avoir des informations sur les processus en cours + d'exécution (voir « man ps » pour les + options):
    + $ ps -o user,pid,state,cmd x + USER PID S CMD + … + kim 27030 Z [chrome] <defunct> + kim 27072 S /opt/google/chrome/chrome --type=renderer + kim 29146 S bash + kim 29834 S evince + kim 29858 S emacs cours.xhtml + kim 29869 R ps -o user,pid,state,cmd x +
    +

    + +
    +
    +

    États des processus (sous Linux)

    + + + + + + +
    R Running (en cours d'exécution)
    S Interruptible sleep (en attente, + interruptible)
    D Uninterruptible sleep (en attente, + non-interruptible)
    T Stopped (interrompu)
    Z Zombie (terminé mais toujours + listé par le système)
    +
    + +
    +

    Signaux

    +

    L'OS peut envoyer des signaux à un processus. Sur réception + d'un signal, un processus peut interrompre son comportement normal + et exécuter son gestionnaire de signal. Quelques signaux: +

    + + + + + + + + + +
    Nom Code Description
    HUP 1 demande au processus de + s'interrompre
    INT 2 demande au processus de se + terminer
    ABRT 2 interrompt le processus et produit + un dump
    KILL 9 interrompt le processus immédiatement +
    SEGV 11 signale au processus une erreur mémoire +
    STOP 24 suspend l'exécution du processus +
    CONT 28 reprend l'exécution d'un processus suspendu +
    +
    +
    +

    Processus et terminal

    +

    Un processus est lié au terminal dans lequel il est + lancé. Si on exécute un programme dans un terminal et que le + processus ne rend pas la main, le terminal est bloqué + + + $ gedit + + + On peut envoyer au processus le signal STOP en + tapant ctrl-Z dans le terminal: + + + $ gedit + ^Z + [1]+ Stopped gedit + + + Le processus est suspendu, la fenêtre est gelée (ne répond plus). +

    +
    +
    +

    Processus et terminal

    +

    On peut reprendre l'exécution du programme de deux + manières:
    + $ fg
    + Reprend l'exécution du processus et le remet en avant plan (terminal + bloqué)

    + $ bg
    + Reprend l'exécution du processus et le remet en arrière plan (terminal +libre)

    + On peut lancer un programme + directement en arrière plan en faisant:
    + $ gedit &
    + On peut envoyer un signal à un + processus avec la commande « kill [-signal] pid Â»
    + $ kill -9 2345
    +

    +
    +
    +

    Processus et entrées/sorties

    +

    Le terminal et le processus sont liés par trois fichiers + spéciaux:

    +
      +
    1. L'entrée standard (stdin), reliée + au clavier
    2. +
    3. La sortie standard (stdout), reliée + à l'affichage
    4. +
    5. La sortie d'erreur (stderr), reliée + à l'affichage
    6. +
    +

    Dans le shell, on peut utiliser les + opérateurs <, > + et 2> pour récupérer le contenu + de stdin, stdout + et stderr:
    + +$ sort < toto.txt +$ ls -l > liste_fichiers.txt +$ ls -l * 2> erreurs.txt + +

    +
    +
    +

    Processus et entrées/sorties

    +

    Dans le shell, l'opérateur | permet + d'enchaîner la sortie d'un programme avec l'entrée d'un + autre:
    + $ ls -l *.txt | sort -n -r -k 5 | head -n 1 +

    +
      +
    1. affiche la liste détaillée des + fichiers textes
    2. +
    3. trie (et affiche) l'entrée standard par ordre + numérique décroissant selon le 5ème champ
    4. +
    5. affiche la première ligne de + l'entrée standard
    6. +
    +
    + -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt + -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt + -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt + -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt + -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt + -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt + + -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt + +
    + +
    +
    +

    Processus de type daemon

    +

    + Un daemon (prononcé démon) est un processus + qui non-interactif qui tourne en tâche de fond (pas + d'entrée/sortie sur le terminal, pas d'interface graphique, …). On + communique avec ce processus via des signaux ou en lisant + ou écrivant dans des fichiers ou connexions réseau. Le plus souvent, + leur but est de fournir un service +

    +

    Exemple de scénario: « Les utilisateurs doivent interagir avec + le matériel. L'accès au matériel demande des droits + administrateur. » +

    + +
    +
    +

    Quelques daemons sous Linux

    + + + + + + + + + + +
    Nom Description
    sshd shell distant sécurisé
    crond exécution périodique de programmes
    cupsd serveur d'impressions
    pulseaudio serveur de son (mixe les sons des + différentes applications)
    udevd détection de matériel hotplug
    nfsd serveur de fichier réseau
    smtpd livraison des e-mail
    httpd serveur de pages Web
    +
    +
    +

    Architecture client-serveur

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Client + + + + + Serveur + + + + + + + + + Client + + + + + + + + + + + + + + Client + + + + + + Client + + + + + + + + + + Client + + + + + + Client + + + + + + + + + + + + + +

    +

    + Des processus clients communiquent + avec le serveur à travers le + réseau. Les clients sont indépendant et ne communiquent pas entre + eux. Attention plusieurs clients peuvent se trouver su la + même machine physique! +

    +
    +
    +

    Architecture client-serveur

    + +

    Exemples: serveur de bases de données, serveur mail, serveur Web, + terminal de carte bancaire, …

    +
    + + diff --git a/unix_prog_web/unix_prog_web_03.xhtml b/unix_prog_web/unix_prog_web_03.xhtml new file mode 100644 index 0000000..b3dd771 --- /dev/null +++ b/unix_prog_web/unix_prog_web_03.xhtml @@ -0,0 +1,54 @@ + + + + + Réseaux, TCP/IP + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 2

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + + + + diff --git a/unix_prog_web/unix_prog_web_04.xhtml b/unix_prog_web/unix_prog_web_04.xhtml new file mode 100644 index 0000000..b0264bd --- /dev/null +++ b/unix_prog_web/unix_prog_web_04.xhtml @@ -0,0 +1,549 @@ + + + + + Web et HTML + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 4

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation ✔
    2. +
    3. Réseaux et Internet ✔
    4. +
    5. Le Web +
        +
      • 3.1 Internet et ses services
      • +
      • 3.2 Fonctionnement du Web
      • +
      • 3.3 Adressage des documents Web
      • +
      • 3.4 Le protocole HTTP
      • +
      • 3.5 HTML, le format des documents
      • +
      +
    6. +
    +
    +

    Internet et ses services

    +
    +

    Bref historique d'Internet (1/2)

    + + + + + + + + + + + + + + + +
    1959-1968 ARPA + (Advanced Research Project Agency) crée un réseau + de quelques machines capable de résister à une attaque.
    1969 ARPANET. Interconnexion des ordinateurs + centraux des grandes universités et institutions + américaines. Première utilisation du concept de paquet d'information.
    1970-1982 Interconnexion avec la Norvège et le Royaume-Uni. +
    1982 Passage au protocole TCP/IP. Naissance de l'Internet actuel.
    +
    +
    +

    Bref historique d'Internet (2/2)

    + + + + + + + + + + + + + + + +
    1986 « Autoroutes de + l'information ». Des super-ordinateurs et les premières + connexions à fibres optiques sont utilisées pour accélérer + le débit d'Internet.
    1987-1992 Apparition des premiers fournisseurs + d'accès. Les entreprises se connectent.
    1993-2000 Avènement du Web. Démocratisation du haut-débit (vers + 2000 pour la France). +
    2000-présent Explosion des services en ligne, arrivée des réseaux + sociaux, internet mobile, Cloud (stockage et calcul + mutualisés accessible depuis internet).
    +
    + +
    +

    Internet

    + +
    +
    +

    Exemples de services

    + + + + + + + + + + + + + + + + +
    ServiceProtocolePortDescription
    ftp File Transfer Protocol + 20,21 Transfert de fichiers
    telnet Network Virtual + Terminal 23 Shell à distance
    ssh Secure Shell 22Shell à + distance crypté
    mailSimple Mail Transfer + Protocol 25 Envoi de mail
    pop Post Office + Protocol 110Récupération de mail
    imap Internet Message Access + Protocol 143Synchronisation de mails
    nslookup Domain Name + System 42 Serveur de noms
    http Hyper Text Transfer Protocole80Web
    +
    +
    +

    World Wide Web (1/2)

    + +
    + +
    +

    World Wide Web (2/2)

    +

    Concepts clé:

    + + + + +
    URL localisation d'une page Web (« adresse de + la page »)
    HTTP protocole de communication entre un + client et un serveur Web
    HTML langage de description des pages + Web
    +

    Évolutions récentes (Web 2.0, internet mobile, Cloud, …)

    + +
    + + +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation
    2. +
    3. Réseaux et Internet
    4. +
    5. Le Web +
        +
      • 3.1 Internet et ses services
      • +
      • 3.2 Fonctionnement du Web
      • +
      • 3.3 Adressage des documents Web
      • +
      • 3.4 Le protocole HTTP
      • +
      • 3.5 HTML, le format des documents
      • +
      +
    6. +
    +
    +

    Fonctionnement du Web

    +
    +

    Fonctionnement du Web

    +
    + +
    + +
    + +
    +

    Côté client

    +

    Le navigateur :

    + +
    + +
    +

    Côté serveur

    + +
    + +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation
    2. +
    3. Réseaux et Internet
    4. +
    5. Le Web +
        +
      • 3.1 Internet et ses services
      • +
      • 3.2 Fonctionnement du Web
      • +
      • 3.3 Adressage des documents Web
      • +
      • 3.4 Le protocole HTTP
      • +
      • 3.5 HTML, le format des documents
      • +
      +
    6. +
    +
    +

    Adressage des documents Web

    +
    +

    Adressage des documents Web (1/3)

    + + +
    URL Uniform Resource Locator + identifie un document sur internet
    +

    Une URL se décompose en 3 partie

    + +

    Syntaxe (simplifiée) :

    + protocole://adresse/document +

    Exemple :

    + http://www.lri.fr/~kn/teach_fr.html +
    + +
    +

    Adressage des documents Web (2/3)

    +

    On peut aussi préciser un numéro + de port, des paramètres + et un emplacement : +

    + protocole://adresse:port/document?p1=v1&p2=v2#empl +

    Exemple :

    + http://www.youtube.com:80/results?search_query=tbbt#search-results +

    Le serveur utilise les paramètres passés par le client dans + l'URL pour calculer le contenu de la page (changer la + chaîne « tbbt » ci-dessus et essayer)

    +
    +
    +

    Adressage des documents Web (3/3)

    +

    + La racine d'un site Web + (ex: http://www.lri.fr/) correspond + à un répertoire sur le disque du serveur + (ex: /var/www). Le fichier

    + http://www.lri.fr/index.html +

    se trouve à l'emplacement

    + /var/www/index.html +

    Le serveur Web peut aussi effectuer des réécritures + d'adresses :

    + http://www.lri.fr/~kn/index.html +

    devient

    + /home/kn/public_html/index.html +
    + +

    Le protocole HTTP

    +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation
    2. +
    3. Réseaux et Internet
    4. +
    5. Le Web +
        +
      • 3.1 Internet et ses services
      • +
      • 3.2 Fonctionnement du Web
      • +
      • 3.3 Adressage des documents Web
      • +
      • 3.4 Le protocole HTTP
      • +
      • 3.5 HTML, le format des documents
      • +
      +
    6. +
    +
    + +
    +

    Caractéristiques du protocole HTTP

    + +
    +
    +

    Format des messages HTTP

    +

    Les messages ont la forme suivante

    + + +
    +
    +

    Démo

    +
    +

    HTML, le format des documents

    +
    +

    Plan

    +
      +
    1. Systèmes d'exploitation
    2. +
    3. Réseaux et Internet
    4. +
    5. Le Web +
        +
      • 3.1 Internet et ses services
      • +
      • 3.2 Fonctionnement du Web
      • +
      • 3.3 Adressage des documents Web
      • +
      • 3.4 Le protocole HTTP
      • +
      • 3.5 HTML, le format des documents
      • +
      +
    6. +
    +
    +
    +

    HTML

    +

    + HyperText Markup Language : langage de mise en forme + de documents hypertextes (texte + liens vers d'autres + documents). Développé au CERN en 1989.
    + 1991 : premier navigateur en mode texte
    + 1993 : premier navigateur graphique (mosaic) + développé au NCSA (National Center for Supercomputing + Applications) +

    +
    +
    +

    Document HTML

    + +
    + + + + + + + + +
    Exemple Rendu par défaut
    en gras ]]>Un + texte en gras
    Un lien ]]>Un lien
    +
  • Premièrement
  • +
  • Deuxièmement
  • + ]]>
      +
    • Premièrement
    • +
    • Deuxièmement
    • +
    +
    +
    +

    On dit que ]]> est une balise + ouvrante et ]]> une + balise fermante. On peut + écrire ]]> comme raccourci pour + ]]>. +

    +
    +
    +

    Historique du langage HTML

    + + + + + + + + +
    1973 GML, Generalised Markup Language développé chez +IBM. Introduction de la notion de balise.
    1980 SGML, Standardised GML, adopté par l'ISO
    1989 HTML, basé sur SGML. Plusieurs entreprises (microsoft, +netscape, ... ) interprètent le standard de manière +différente
    1996 XML, eXtensible Markup Language norme pour les +documents semi-structurés (SGML simplifié)
    2000 XHTML, version de HTML suivant les conventions + XML
    2008 Première proposition pour le nouveau standard, + HTML5
    2014Standardisation de HTML5
    +
    + +
    +

    XHTML vs HTML

    +

    On utilise XHTML dans le cours. Différences avec HTML:

    + +

    Les avantages sont les suivants

    + +
    +
    +

    Rôle d'(X)HTML

    +

    Séparer la structure du document de + son rendu. La structure donne une sémantique au + document :

    + +

    Cela permet au navigateur d'assurer un rendu en fonction de la + sémantique. Il existe différents types de rendus:

    + +
    +
    +

    Exemple de document

    +

    (liste des balises + données sur la feuille de TD 4!)

    +
    + + + + Un titre + + + +

    Titre de section

    +

    premier paragraphe de texte. On met + un lien ici. +

    + + + ]]>
    +
    +
    + + diff --git a/unix_prog_web/unix_prog_web_05.xhtml b/unix_prog_web/unix_prog_web_05.xhtml new file mode 100644 index 0000000..3c32ca0 --- /dev/null +++ b/unix_prog_web/unix_prog_web_05.xhtml @@ -0,0 +1,489 @@ + + + + + CSS + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 5

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    +

    Introduction

    +
    +

    Cascading Style Sheets (CSS)

    + + + + +
    CSS + Langage permettant de décrire le style graphique + d'une page HTML +
    +

    On peut appliquer un style CSS

    + +
    +
    +

    L'attribut style

    + color:redUn lien]]> + +

    Apperçu:

    +

    + Un lien +

    +

    Inconvénients :

    + +
    + +
    +

    L'élément style

    + + + … + + + + Lien 1 Lien 2 + + ]]> +

    Apperçu :

    +

    + Lien + 1 + Lien 2 + +

    +

    Inconvénient : local à une page

    +
    +
    +

    Fichier .css séparé

    +

    Fichier style.css:

    +

    + a { color: red; } +

    +

    Fichier test.html:

    +

    + + + … + ]]><link href="style.css" type="text/css" rel="stylesheet" /> + + … + ]]> +

    +

    Modifications & déploiement aisé

    +
    +
    +

    Syntaxe

    +

    Une propriété CSS est définie en utilisant la + syntaxe: +

    +

    nom_prop : val_prop + ;

    + +
    +

    Boîtes

    +
    +

    Unités de longueur

    +

    CSS permet de spécifier des longueurs comme valeurs de + certaines propriétés (position et taille des éléments, épaisseur + des bordures, …). Les longueurs doivent comporter une + unité. Les unités reconnues sont:

    + + + + + + + + + + + + +
    px pixel
    in pouce (2,54cm)
    cm centimètre
    mm millimètre
    pt point (1/72ème de pouce, 0,35mm)
    pc pica (12 points)
    em facteur de la largeur d'un caractère de la police + courante
    ex facteur de la hauteur d'un caractère « x » + de la police courante
    % pourcentage d'une valeur particulière + (définie par propriété)
    vh viewport height (% de la + hauteur de la partie visible de la page)
    vw viewport + width (% de la largeur de la partie visible de la + page)
    +
    + + +
    +

    Boîte

    + +

    Chaque élément de la page HTML possède une boîte + rectangulaire qui délimite le contenu de l'élément: +

    +
    + ← width →
    + margin (marge)
    + + border (bordure)
    + + padding (ajustement)
    + + Lien 1 + + +
    +
    +
    +
    ↑



    + height



    ↓ +
    +
    + +

    La taille t du contenu est calculée pour que:
    + (height|width) = padding + margin + border + t +

    +
    +
    +

    Marge, bordure, ajustement

    +

    On peut spécifier jusqu'à 4 valeurs:

    + + span { + padding:10pt 20pt 5pt 0pt; + margin:10pt 5pt; + border-width:3pt; + border-color:red blue green; + border-style:solid dotted; + } +
    Du texte dans une boite +
    +
    +
    +

    Modes d'affichage

    +

    La propriété display contrôle le mode + d'affichage d'un élément: +

    + + + + + + +
    nonel'élément n'est pas dessiné et n'occupe + pas d'espace
    inlinel'élément est placé sur la ligne + courante, dans le flot de texte. La taille du contenu (avec + les marges, ajustements et bordures) dicte la + taille de la boîte, height et width sont + ignorés (, , , , …]]> + sont inline par défaut).
    blockl'élément est placé seul sur sa + ligne. La taille est calculée automatiquement mais peut être + modifiée par width et height + (,

    ,

    , …]]> + sont block par défaut)

    inline-blockpositionné comme inline + mais la taille peut être modifiée comme pour block
    +
    +
    +

    Modes d'affichage (exemples)

    +
    +
    + a { display: inline; … } +
    +
    + Le lien 1, + le lien 2 et + le lien 3. +
    +
    +
    +
    + a { display: block; … } +
    +
    + Le lien 1, + le lien 2 et + le lien 3. +
    +
    +
    +
    + a { display: inline-block; + width: 4em; + height: 2em; + … } +
    +
    + Le lien 1, + le lien 2 et + le lien 3. +
    +
    +
    +
    +

    Positionnement

    +

    Le type de positionnement est donné par la + propriété position

    + + + + + +
    staticpositionnement « automatique + »
    fixedpositionnement par rapport à la fenêtre + du navigateur (la boîte est supprimée du flot)
    relativepositionnement « relatif » par + rapport à la position normale
    absolutepositionnement « absolu » par rapport + à l'ancêtre le plus proche qui n'est pas static
    +

    Pour fixed, relative et absolute, + les propriétés top, bottom, left + et right dénotent les décalages respectifs. +

    +
    +
    +

    Positionnement (exemple)

    +
    +
    + a { position: static; + … } + a { position: fixed; + right:10pt; + top: 10pt; + }
    +
    + a { position: relative; + left: 10pt; + bottom: -5pt; + … } + a { position:absolute; + right:0pt; + bottom: 10pt; + } +
  • …
  • …]]>
    +

    + +
    +

    Autres propriétés

    +
    +

    Couleurs

    +

    Les couleurs peuvent être données:

    + +
    +
    +

    Propriétés du texte

    +

    Certaines propriétés permettent d'alterer le rendu du texte + d'un élément

    + + + + + + +
    directionltr ou rtl + (orientation du texte)
    text-transform capitalize, uppercase, lowercase +
    text-decoration underline, overline, line-through
    text-align left, right, center, justify
    text-indent longueur du retrait de paragraphe
    +
    +
    +

    Propriétés de la police

    + + + + + +
    font-familyliste de nom de polices séparées + par des virgules (Helvetica, sans, "Times New Roman")
    font-style normal, italic
    font-weight normal, lighter, bold, bolder
    font-size soit une longueur + soit xx-small, x-small, small, medium, + large, x-large, xx-large +
    +

    On peut aussi spécifier un descripteur de + police

    + + @font-face { + font-family: Toto; + src: url(toto.ttf); + } + a { font-family: Toto; } + +
    +

    Selecteurs

    +
    +

    Selecteurs

    +

    On peut sélectionner finement les éléments auxquels un style + s'applique

    + + + + + + + + + +
    xtous les éléments dont la balise + est x
    .foo tous les éléments dont + l'attribut class vaut foo
    #fool'élément dont l'attribut + id vaut foo (les id doivent être uniques)
    X Y tous les éléments + selectionnés par Y qui sont des descendants d'éléments + sélectionnés par X
    X > Y tous les éléments dont + selectionné par Y qui sont des fils d'éléments + sélectionnés par X
    a:visitedles liens déjà + visités
    a:linkles liens non + visités
    X:hoverélément selectionné + par X et survollé par la souris
    + div.foo ul li a:visited { color: red; } +
    + + diff --git a/unix_prog_web/unix_prog_web_06.xhtml b/unix_prog_web/unix_prog_web_06.xhtml new file mode 100644 index 0000000..892c59a --- /dev/null +++ b/unix_prog_web/unix_prog_web_06.xhtml @@ -0,0 +1,510 @@ + + + + + PHP : Introduction + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 6

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + +

    Introduction et généralités

    + +
    +

    Avant PHP

    +

    Constat: besoin de pages Web dynamiques (contenu + généré au chargement de la page)
    + Première solution: scripts (ou programmes) CGI
    + http://www.example.com/foo.cgi?sort=alpha +

    +
      +
    1. Programme écrit dans n'importe quel langage et exécuté par + le serveur Web
    2. +
    3. Le serveur passe les infos au programme par + des variables d'environnement et l'entrée + standard
    4. +
    5. Le programme génère une page Web par affichage sur la + sortie standard
    6. +
    +

    Inconvénients

    +
      +
    1. Communication difficile entre le serveur Web et le + programme
    2. +
    3. Les langages généralistes ne sont pas faits pour le + Web (pas de support d'HTML nativement par exemple)
    4. +
    +
    + +
    +

    PHP (Avantages)

    + +

    Exemple: fichier heure.php :

    + Heure + +

    L'heure

    +

    Il est ]]><?php echo date('H:i:s'); ?> + + ]]> +

    +
    +

    PHP

    + +
    +
    +

    Principe

    + +
    + + Heure + +

    L'heure

    +

    Il est ]]>15:53:00 + + ]]> +

    +
    + +
    +

    PHP (inconvénients)

    +
    1. Génère du HTML via echo (débuggage + difficile)
    2. +
    3. Interprété : problème de performances si beaucoup de + clients
    4. +
    5. NON TYPÉ : C'est + HORRIBLE
    6. +
    +

    Devinette : qu'affiche l'instruction suivante ? (on ne + connaît pas encore PHP mais on peut utiliser son intuition)

    + echo 013 + "013 c'est en fait 11 en base 8"; + +
    +

    Types de base et expressions simples

    +
    +

    Entiers (integer)

    +

    Les entiers ont une taille fixe (généralement 32bits) :

    + + + + + +
    Notation décimale10, 3444, -25, 42, + …
    Notation binaire0b10, -0b10001010, + …
    Notation octale0755, -01234567, …
    Notation hexadécimale0x12b, -0xb00b5, + 0xd34db33f, …
    +

    Opérateurs arithmétiques :

    + + + + +
    - « Moins » unaire
    +, -, *, % addition, soustraction, produit, modulo
    /Division. Si + x et y sont des entiers et que y + divise x alors x/y renvoie + un entier sinon x/y renvoie + un flottant! +
    +
    +
    +

    Booléens (boolean)

    + + +
    TRUE/FALSEvrai/faux (en majuscules)
    +

    Opérateurs logiques :

    + + + +
    ! négation (unaire)
    &&, || « et » logique, « ou » logique
    +
    +
    +

    Flottants (float)

    + + +
    Notation scientifique1.3, 0.99, 00.34e102, -2313.2313E-23, + …
    +

    Opérateurs arithmétiques :

    + + + + +
    - « Moins » unaire
    +, -, *, /, % opérations standard
    abs, sin, cos, sqrt, pow, …fonctions + mathématiques pré-définies
    +
    +
    +

    Variables, affectations

    + +

    Exemples :

    + $foo = 123; + $bar = 1323e99; + $_toto = $bar; + +
    +
    +

    Chaînes de caractères (string)

    + + + +
    Simples quotes 'foo', 'c\'est + moi', 'Un antislash : \\', …
    + Pas d'autre séquence d'échappement +
    Doubles quotes"foo", "c'est + moi", "Un retour chariot: \n", "La variable + \$toto contient: $toto"
    + Les séquences d'échapement sont: + \n, \t, \\, \", \$. Les variables (sous-chaînes + commençant par un $) sont remplacées par leur valeur. + +
    +

    Opérations sur les chaînes :

    + + + + + +
    $foo[10] accès au 11ème caractère
    $foo[10] = 'A'; mise à jour
    . concaténation
    strlenlongueur
    +
    +
    +

    Tableaux (array)

    +

    Les tableaux sont des tableaux associatifs :

    + + + + + + + + +
    array()crée un tableau vide
    array(k1 => v1, …, + kn => vn )créé un nouveau tableau pour lequel + l'entrée ki est associée à la + valeur vi +
    array(v1, …, vn )créé un nouveau tableau pour lequel + l'entier i-1 + valeur vi +
    +

    Quelques fonctions :

    + + + + + +
    count taille du tableau (nombre d'éléments)
    sort, rsort trie un tableau (rsort trie par + ordre décroissant) par valeurs. Les clés sont supprimées et + de nouvelles clées de 0 à longueur - 1 sont crées
    ksort, krsorttrie un tableau par + clés
    print_raffiche un tableau (ne pas utiliser echo)
    +
    +
    +

    Tableaux (exemples)

    + $tab1 = array(); //tableau vide + $tab2 = array("zero", "un", "deux", "trois"); + $tab3 = array("pi" => 3.14159, "e" => 2.71828; "phi" => 1.61803); + echo $tab2[0]; //affiche zero + echo $tab3["phi"]; //affiche 1.61803 + $tab1["dix"] = 10; //affectation + sort($tab2); + echo $tab2[0];//affiche deux + sort($tab3); + echo $tab3[0]; //affiche 1.61803 + echo $tab3[1]; //affiche 2.71828 + echo $tab3[2]; //affiche 3.14159 + echo count($tab2); //affiche 4 +
    +
    +

    NULL

    +

    NULL est une constante spéciale, de + type NULL. C'est la valeur d'une variable non déclarée + ou d'un accès invalide dans un tableau.

    + $a = $b; // $b n'est pas déclarée, $a reçoit NULL + $c = $tab["toto"]; // $tab existe mais n'a pas de valeur + // associée à la clé "toto", $c reçoit NULL + +
    +
    +

    Conversions de types

    +

    ☠☢☣☹ : +les conversions se + font implicitement, en fonction du + contexte. +

    + + + + + +
    Booléen 0, 0.0, "", "0", NULL, et le tableau + vide sont convertis en FALSE, le reste + en TRUE (en particulier "00" vaut TRUE + ☹)
    Entier FALSE ⇝ 0, TRUE ⇝ 1, + les flottants sont arrondis par partie entière (1.23242 ⇝ + 1). Les chaînes dont un préfixe + est un entier sont converties en cet entier, sinon en 0 ("123 + bonjour" ⇝ 123)
    Chaîne La chaîne contient la représentation + de la valeur ( 1 . "ABC" + ⇝ "1ABC"). FALSE et NULL sont + convertis en "", TRUE converti en "1"
    +

    La réponse à la devinette : 013 + "013 c'est 11 en octal" :

    + + +
    +
    +

    Comparaisons

    +

    Opérateurs de comparaisons

    + + + + + + + + + + +
    Opérateur Description
    $a == $b Égal, après conversion + de type
    $a != $b Différent, après conversion + de type +
    $a === $b Égal et de même type +
    $a !== $b Différent ou de type différent +
    $a < $b Strictement plus petit, + après conversion de type +
    $a > $b Strictement plus grand, + après conversion de type +
    $a <= $b Plus petit, + après conversion de type +
    $a >= $b Plus grand, + après conversion de type +
    +

    On comparera TOUJOURS des valeurs + de MÊME TYPE

    +
    +
    +

    Affichage

    +

    On utilise l'instruction echo pour écrire + du texte dans la page HTML résultante :

    + + + + + + + + + + + + + + + + + +
    Code PHPCode HTMLAffichage dans le navigateur
    echo "Hello";
    + echo "World";
    HelloWorldHelloWorld
    echo "Hello\n";
    + echo "World";
    Hello
    World
    Hello World
    echo "Hello<br/>";
    + echo "World";
    Hello<br/>WorldHello
    World
    +
    +

    Structures de contrôle

    +
    +

    Conditionnelle: if else

    + + if ( c ) { + // cas then + } else { + // cas else + }; + +

    Les parenthèses autour de la condition c sont + obligatoires. La branche else { … } est + optionnelle. Les accolades sont optionnelles pour les blocs + d'une seule instruction

    +
    +
    +

    Boucles

    +
    + while ( c ) { + //corps de la boucle while + }; +
    +
    + + do { + //corps de la boucle do + } while ( c ); +
    + +
    + + for(init ; test ; incr) { + //corps de la boucle for + }; +
    +
    + + foreach($tab as $key => $val) { + //corps de la boucle foreach + //$tab est un tableau, $key une clé et $val la valeur associée + }; +
    +

    Remarque: ksort et krsort influencent + l'ordre de parcours par une boucle foreach

    +
    +
    +

    break et continue

    + + + + + +
    breaksort de la boucle + immédiatement
    continue reprend à l'itération + suivante
    + + for($i = 0; $i < 10; $i = $i + 1){ + if ($i == 2 || $i == 4) continue; + if ($i == 7) break; + echo $i . ' '; + } + +

    Affiche 0 1 3 5 6

    +
    +

    Passage de paramètres depuis une page

    +
    +

    Formulaire HTML (version simple)

    +

    L'élément <form> permet de créer des formulaires HTML. Un +formulaire est constitué d'un ensemble de widgets (zones de saisies +de textes, boutons, listes déroulantes, cases à cocher, ... ) et d'un +bouton submit. Lorsque l'utilisateur appuie sur le bouton, les +données du formulaires sont envoyées au serveur. Exemple, fichier +age.html :

    + + +
    + Entrez votre année de naissance: + +
    + + + ]]>
    +
    +
    +

    Paramètres

    +

    + Les paramètres envoyés au serveur web par la méthode get, sont + accessibles en PHP dans la variable globale $_GET. C'est un tableau + qui associe au nom d'un input sa valeur. + Exemple : calcul.php

    + + + "; + echo date("Y") - ]]>$_GET["val_age"] ans"; + echo "
    "; + ?> + + + ]]>
    +
    + + + diff --git a/unix_prog_web/unix_prog_web_07.xhtml b/unix_prog_web/unix_prog_web_07.xhtml new file mode 100644 index 0000000..73d92d1 --- /dev/null +++ b/unix_prog_web/unix_prog_web_07.xhtml @@ -0,0 +1,457 @@ + + + + + PHP : Fonctions + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 7

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + +

    Définitions de fonctions

    + +
    +

    Fonctions

    +

    Les fonctions sont déclarées à l'aide du + mot-clé function. On renvoie des résultats à + l'aide du mot-clé return.

    + function double ($x) + { + return $x + $x; + } + + echo double(10); + ]]> + +
    + + +
    +

    Portée des variables locales et globales + +

    +
    +
    + <?php + $a = 42; + function add_a($x) + { + + return $x + $a; + } + echo add_a(10); + ?> + +
    +
    + <?php + $a = 42; + function add_a($x) + { + global $a; + return $x + $a; + } + echo add_a(10); + ?> + +
    +
    + + +

    Le code de gauche affiche 10 ! + Les variables ont une portée locale + par défaut. Si $a n'est pas définie dans le corps de la + fonction, sa valeur est NULL + (variable non définie). Pour référencer + des variables globales, on utilise le mot clé global. +

    +
    +
    +

    Fonction : définition

    +

    On peut utiliser une fonction « avant » de la définir :

    + <?php + echo next(10); + echo <br/>; + + function next($x) + { + return $x + 1; + } + ?> +

    On définira toujours des fonctions avant de + les utiliser. On ne peut pas définir deux fonctions avec le même + nom. +

    +
    +
    +

    Fonctions : passage par référence

    +

    On utiliser le modificateur & devant + un paramètre de fonction pour indiquer que ce dernier est passé + par référence.

    +
    +
    + <?php + function add_a($tab) + { + $tab["a"] = 42; + } + + $mytab = array(); + add_a($mytab); + echo $mytab["a"]; + //n'affiche rien (car NULL ⇝ "") +?> +
    +
    + <?php + function add_a(&$tab) + { + $tab["a"] = 42; + } + + $mytab = array(); + add_a($mytab); + echo $mytab["a"]; + //affiche 42 +?> +
    + +
    +

    Lorsque l'on veut modifier un argument de la + fonction (plutot que de renvoyer une version modifiée, par + ex. mise à jour d'un tableau, d'une chaîne, …), on doit le + passer par référence. +

    +
    +

    Manipulation des chaînes et expressions régulières

    +
    +

    Quelques fonctions utilitaires sur les chaînes

    +
    +
    explode($delim, $entree)
    +
    Découpe la chaîne $entre +e suivant la + sous-chaîne $delim et renvoie les morceaux dans un + tableau.
    +
    implode($delim, $tab)
    +
    Réunit les chaînes se trouvant dans le + tableau $tab en les séparant par la + chaîne $delim. +
    +
    ltrim($entree)
    +
    Retire les caractères blancs en début de chaîne.
    +
    rtrim($entree)
    +
    Retire les caractères blancs en fin de chaîne.
    +
    trim($entree)
    +
    Retire les caractères blancs en début et en fin de + chaîne.
    +
    htmlspecialchars($entree)
    +
    converti les caractères &, ", + ', < et > en + &amp;, &quot;, + &apos;, &lt; et &gt;. +
    + +
    +
    +
    +

    Expressions régulières : syntaxe

    +

    Les expressions régulières de PHP sont au format PCRE (Perl + Common Regular Expressions) '/r/' + où r est une expression de la forme:

    + + + + + + + + + + + + + + + + + +
    r ::= a (un caractère)
    | . (n'importe quel caractère)
    | r1 | r2 (r1 ou r2)
    | r? (r répétée au plus 1 fois)
    | r* (r répétée 0 fois ou plus)
    | r+ (r répétée 1 fois ou plus)
    | [c1 … cn] (un caractère parmis c1, …, cn)
    | [c1-cn] (un caractère parmis c1, …, cn)
    | [^c1 … cn] (un caractère sauf c1, …, cn)
    | [^c1-cn] (un caractère sauf c1, …, cn)
    | ^ (début de texte)
    | $ (fin de texte)
    | (r) (r elle même)
    +
    +
    +
    +

    Expressions régulières : recherche

    + preg_match($regexp, $chaine) +

    renvoie 1 si une sous-chaine de $chaine + correspond à $regexp, 0 si aucune sous-chaine ne correspond + et FALSE en cas de problème (attention, + utiliser === pour tester le résultat). +

    +<?php + $chaine = "ABCDEFABCDEF"; + echo preg_match('/ABC/', $chaine); // affiche 1 + echo preg_match('/DEF/', $chaine); // affiche 1 + echo preg_match('/^ABC/', $chaine); // affiche 1 + echo preg_match('/^DEF/', $chaine); // affiche 0 + echo preg_match('/ABC$/', $chaine); // affiche 0 + echo preg_match('/DEF$/', $chaine); // affiche 1 + echo preg_match('/(ABC...)+/', $chaine); // affiche 1 + echo preg_match('/[^A-Z]+/'); // affiche 0 + echo preg_match('/[^A-Z]*/'); // affiche 1 ! + echo preg_match('/^[^A-Z]*$/'); // affiche 0 +?> +
    +
    +

    Expressions régulières : substitution

    + preg_replace($regexp, $motif, $chaine) +

    recherche toutes les sous-chaînes de $chaine reconnues + par $regexp et les remplace par $motif. Ce dernier + peut contenir $i pour référencer + le ième groupe de parenthèses

    + <?php + $chaine = "10-31-1981"; + $reg1 = "/([0-9]+)-([0-9]+)-([0-9]+)/"; + echo preg_replace($reg1, "$2/$1/$3", $chaine); + // affiche 31/10/1981 + + $reg2 = "/1/"; + echo preg_replace($reg2, "toto", $chaine); + // affiche toto0-3toto-toto98toto + + $reg3 = "/[0-9]([0-9]*)/" + echo preg_replace($reg3, "$1", $chaine); + // affiche 0-1-981 (* déplie la regexp le plus possible) +?> +
    +
    +

    Expressions régulières : séparation

    + preg_split($regexp, $chaine) +

    renvoie un tableau des sous-chaine de $chaine séparées + par $motif (équivalent à explode pour + des $regexp constantes).

    + <?php + $chaine = "Une phrase, c'est plusieurs mots."; + print_r (preg_split("/[ ,.']+/", $chaine)); + //Affiche: + //Array ( [0] => Une [1] => phrase [2] => c [3] => est + // [4] => plusieurs [5] => mots [6] => ) +?> +
    +
    +

    Expressions régulières : recherche exhaustive

    + + preg_match_all($regexp, $chaine, &$resultat) +

    &$resultat est un tableau passé par + référence. Après l'appel, $resultat[0] contient un + tableau avec toutes les sous-chaines reconnues + et $resultat[i] contient tous les résultats reconnus par le + ième groupe de parenthèses. Renvoie le nombre de chaines + trouvées (i.e. la longueur de $resultat[0]). +

    + <?php + $res = array(); + $chaine = "ABC ACD AEF AB DEF"; + echo preg_match_all("/A([A-Z]*)/", $chaine, $res); + //Affiche 4 + print_r ($res); + /*Affiche + Array ( [0] => + Array ( [0] => ABC [1] => ACD [2] => AEF [4] => AB) + [1] => + Array ( [0] => BC [1] => CD [2] => EF [4] => B) + ) +*/?> +
    +

    Manipulation de fichiers

    +
    +

    Envoi d'un fichier au serveur (1/2)

    +

    On utilise la méthode post pour les + formulaires. Les valeurs sont envoyées dans la requête HTTP (et non + pas encodées dans l'URL)

    + + <form action="cible.php" method="post" + enctype="multipart/form-data"> + <input type="file" name="fichier" size="20"/> + <button type="sumbit">Uploader le fichier</button> + </form> + +

    Apperçu:

    + + +
    +

    Coté serveur, la variable $_FILES est + définie. $_FILES["fichier"] contient un + tableau avec des informations sur le fichier envoyé. Les autres + champs (par exemple valeur d'un champ texte) sont stockés dans la + variable $_POST (au lieu de $_GET). +

    +
    +
    +

    Envoi d'un fichier au serveur (2/2)

    +

    Étant donné un formulaire avec un champ input de + type file et de nom "fichier" on a accès aux + information suivantes:

    +
    +
    $_FILES["fichier"]["error"]
    Code d'erreur + (0 si tout c'est bien passé, > 0 si une erreur s'est produite. Les + autres champs ne sont définis que si "error" vaut 0). +
    +
    $_FILES["fichier"]["tmp_name"]
    Nom du fichier + temporaire sur le serveur où a été sauvegardé le contenu du + fichier envoyé
    +
    $_FILES["fichier"]["name"]
    Nom original du fichier
    +
    $_FILES["fichier"]["size"]
    Taille du + fichier
    +
    $_FILES["fichier"]["type"]
    Le type MIME du fichier
    +
    +
    +
    +

    Ouverture d'un fichier

    + fopen($nomfichier, $mode) +

    Ouvre un fichier dont on donne le nom avec un mode + particulier. Les modes sont: "r" + (lecture), "r+" (lecture/écriture), + "w" (écriture), + "w+" (lecture/écriture, création si non-existant), + "a" (écriture, ajout à la fin si existant), + "a+" (lecture/écriture, création si non-existant, + ajout à la fin si existant). fopen renvoie un + descripteur de fichier que l'on peut utiliser pour manipuler le + fichier. +

    . +
    +
    +

    Lecture/écriture/fermeture d'un fichier

    + fread($desc, $taille) +

    Lit au maximum $taille caractères dans un fichier + dont le descripteur (renvoyé par fopen) + est $desc. La fonction renvoie un chaine d'au + plus $taille caractères ou FALSE en cas d'erreur. +

    + fwrite($desc, $chaine) +

    Écrit la chaine de caractères à la position courante dans le + fichier dont le descripteur est $desc. Renvoi le nombre + d'octets écrits ou FALSE en cas d'erreur. +

    + fclose($desc) +

    Ferme le fichier dont le descripteur est $desc +

    +
    +
    +

    Déplacement dans un fichier

    + fseek($desc, $offset, $orig) +

    Déplace le pointeur interne de position du fichier dont le + descripteur est $desc de $offset octets. Le + paramètre $orig donne l'origine: SEEK_CUR + (décalage à partir de la position courante), SEEK_SET + (position absolue dans le fichier), SEEK_END (décalage à + partir de la fin de fichier). +

    +
    +
    +

    Interface simplifiée

    + file_get_contents($nomfichier) +

    Ouvre un fichier dont on donne le nom et renvoie son contenu sous + forme d'une chaine de caractères

    + file($nomfichier) +

    Renvoie un tableau avec une case par ligne dans le fichier. Chaque + entrée contient le "\n" terminal.

    +
    + + + diff --git a/unix_prog_web/unix_prog_web_08.xhtml b/unix_prog_web/unix_prog_web_08.xhtml new file mode 100644 index 0000000..9bf82b5 --- /dev/null +++ b/unix_prog_web/unix_prog_web_08.xhtml @@ -0,0 +1,397 @@ + + + + + PHP : Sessions et persistance + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 8

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + +

    En-tête de requêtes HTTP

    + +
    +

    Retour sur le protocole HTTP

    + +
    + +
    +

    Retour sur le protocole HTTP (2)

    + +
    +
    +

    Modifier le content-type en PHP

    +

    Fichier notes_csv.php:

    + <?php + header('Content-type: application/csv'); + header('Content-Disposition: attachement; filename="notes.csv"'); + echo "Nom, Note\n"; + foreach ($NOTES as $nom => $note) + echo $nom . ", " . $note . "\n"; + + ?> +

    ⚠ Attention!

    + +
    + +
    +

    Quelques en-tête utiles

    +

    En tête utilisés par le serveur dans ses réponses

    +
    +
    Content-type
    type MIME du contenu envoyé par le + serveur
    +
    Content-Disposition
    permet de mentionner un nom de + fichier : attachment; filname="foobar.baz"
    +
    Cache-Control
    permet de forcer le client à + retélécharger la page: no-cache, must-revalidate +
    +
    Last-Modified
    date de dernière modification du + contenu demandé
    +
    +

    En tête utilisés par le client dans ses requêtes

    +
    +
    Range
    permet de ne récupérer qu'un intervale + d'octets donné dans un fichier: bytes=500-999 +
    + … +
    + +
    +
    +

    Retour sur le protocole HTTP (3)

    +

    On rappelle que HTTP est un protocole stateless + (sans état, i.e. le serveur Web ne conserve pas d'information + entre les connexions). Quel problème cela pose-t-il ?

    + +

    ⇒ difficle de réaliser une « application » + moderne répartie sur plusieurs pages

    +
    + +

    Cookies

    +
    +

    Cookies

    +

    Un cookie est un packet de données envoyé par le + serveur, stocké par le client (navigateur Web) et renvoyé au serveur + lors d'une nouvelle connexion. Les propriétés d'un cookie sont: +

    +
    +
    Son nom
    une chaîne de caractères
    +
    Sa valeur
    une chaîne de caraceres
    +
    Sa durée de vie
    jusqu'à la fin de la « session » ou pour + une période donnée
    +
    Son domaine
    Le nom du site web émetteur du cookie
    +
    Son chemin
    Le sous-répertoire (par rapport à la racine + du site) pour lequel le cookie est valide
    +
    +

    ⚠ Attention! seul le domaine qui a + déposé le cookie est capable de le relire

    +
    +
    +

    Cookies en PHP

    +

    Créer ou mettre à jour un cookie sur le client:

    + + setcookie($nom, $val, $date); + +
    +
    $nom
    nom du cookie
    +
    $val
    valeur du cookie
    +
    $date
    date d'expiration en secondes + depuis epoch (1er janvier 1970 00:00:00) + ou NULL pour une expiration automatique.
    +
    +

    (on peut récupérer le nombre de secondes depuis epoche avec + la fonction time()).
    + Exemple: +

    + setcookie("mon_cookie", "42", time() + 3600 * 24 * 30); +
    + +
    +

    Cookies en PHP

    +

    On peut récupérer la valeur d'un cookie depuis PHP: +

    + $_COOKIE["mon_cookie"] +

    Un cookie "foo" existe (i.e. a été défini + auparavant) si une entrée correspondante existe dans le tableau + global $_COOKIE. On peut tester qu'une entrée + existe dans un tableau avec isset(). +

    +

    ⚠ Attention!

    + +
    + +
    +

    Avantages et inconvénients des cookies

    + +
    +

    Sessions

    +
    +

    Sessions

    +

    Une session HTTP est un ensemble de requêtes/réponses HTTP + entre un serveur et un même client.
    + Exemple d'un sondage en ligne: +

    +
    1. Le visiteur arrive sur la page q1.php en cliquant sur + le lien « commencer le sondage » (Début de session) +
    2. +
    3. Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie + sur un boutton de soumission qui l'envoie sur q2.php +
    4. +
    5. …
    6. +
    7. Sur q10.php, l'utilisateur coche des choix dans un + formulaire et appuie sur un bouton de soumission qui l'envoie + sur resultat.php
    8. +
    9. Sur resultat.php, le résultat global du sondage (% + par question, nombre de participants jusqu'à présent etc...) est + affiché (Fin de session) +
    10. +
    + +
    +
    +

    Variables de session

    +

    Pour programmer une application Web, on souhaîte avoir accès à + des variables de session c'est à dire des variables qui + sont: +

    + +

    Les variables de sessions sont donc propres à chaque client et + persistent le temp de la session (le temps de session est décidé par + le serveur)

    +
    +
    +

    Variables de session en PHP

    +

    On initie une session avec la fonction:

    + session_start(); +

    Une fois appelée, la variable $_SESSION + contient un tableau que l'on peut utiliser entre plusieurs + pages. Les valeurs contenues dans le tableau persistent jusqu'à la + fin de la session. Une session se termine: +

    + +

    ⚠ + Attention! session_start() doit être appelé + avant le premier echo du fichier.

    +
    +
    +

    Variables de session en PHP (2)

    + + <?php /* Fichier page1.php */ + session_start(); + $_SESSION["Valeur"] = 42; + ?> + + + Veuillez cliquer sur le "page2.php"lien + + +]]> + + + La valeur est echo $_SESSION["Valeur"]; + + + +]]> +
    +
    +

    Avantages et inconvénients des session

    + +
    +
    +

    Sessions PHP: détails d'implantation

    +
    +
    Coté client
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Connexion à une page PHP (envoie du cookie ("php_ssid", "12345")) + + +
    +
    Coté serveur (PHP)
    + session_start();
    + - génération d'un ID unique "12345"
    + - dépot d'un cookie "php_ssid", valeur "12345", durée 10 minutes + - création dans un tableau global d'une entrée:
    + $_GLOBAL["12345"] = Array();
    +
    + $_SESSION = $_GLOBAL[$_COOKIE["php_ssid"]] +
    +
    +
    + +
    +

    Dans la vraie VieTM

    +

    Mélange de variables de sessions, cookies et bases de données.
    + Scénario réaliste: site de commerce en ligne +

    + +

    Pourquoi ?

    + + +
    + + + diff --git a/unix_prog_web/unix_prog_web_09.xhtml b/unix_prog_web/unix_prog_web_09.xhtml new file mode 100644 index 0000000..d2166a9 --- /dev/null +++ b/unix_prog_web/unix_prog_web_09.xhtml @@ -0,0 +1,500 @@ + + + + + Notions de sécurité sur le Web + + + + + + + + + + + + + + + + + + + + +
    +

    Programmation Internet

    +

    Cours 9

    +
    kn@lri.fr
    + http://www.lri.fr/~kn +
    + +

    Faiblesses d'HTTP

    + +
    +

    Disclaimer

    + +

    Ça ne va pas faire de vous des hackers, + juste vous sensibiliser aux problèmes de sécurité… +

    +
    + +
    +

    Élements de cryptographie (1)

    +

    Alice et Bob veulent échanger des données + confidentielles.

    +
      +
    1. 1. Chiffrement symétrique: +
        +
      • + Ils se mettent d'accord sur une clé commune +
      • +
      • Alice chiffre son message avec la clé et + l'envoie à Bob
      • +
      • Bob déchiffre le message avec la clé +
      • +
      +

      + Non sûr (Alice et Bob doivent se mettre d'accord sur une clé en + « clair », par email par exemple) ou non pratique + (ils doivent se rencontrer physiquement pour échanger la + clé).
      + Efficace: on peut implanter plusieurs algorithmes + de chiffrements en utilisant uniquement des opérations + logiques de bases + (AND, OR, XOR). Il est facile de + les implanter sur des puces dédiées (cartes de crédit, + processeurs mobiles). Ils sont « sûrs » tant que la clé + reste secrète. +

      +
    2. +
    +
    +
    +

    Élements de cryptographie (2)

    +

    Alice et Bob veulent échanger des données + confidentielles.

    +
      +
    1. 2.  Chiffrement assymétrique: +
        +
      • Bob crée une clé + publique KBpub + et une clé + secrète KBpriv, telle + que
        + ∀msg, KBpriv(KBpub(msg)) + = KBpub(KBpriv(msg)) + = msg +
        + Bob diffuse sa clé publique (sur sa page Web + par exemple, ou dans un annuaire de clé) et garde sa clé + privée secrète. +
      • +
      • Alice chiffre son message m avec la clé + publique de Bob + (KBpub(m)) et l'envoie à Bob +
      • +
      • Bob + déchiffre le message avec sa clé + privée: KBpriv(KBpub(m))=m +
      • +
      +

      + Sûr et pratique (Bob a généré une paire de clé, et a + déposé la clé publique sur une page Web)
      + Peu efficace: repose sur des problèmes + mathématiques difficiles (factorisation de grands entiers, + courbes eliptiques sur les corps finis). Chiffrer et + déchiffrer un message n'est pas réaliste pour des grands + messages (vidéo en streaming, requêtes Web, …). +

      +
    2. +
    +
    +
    +

    Élements de cryptographie (3)

    +

    On combine les deux méthodes. (Alice envoie un message à Bob)

    + +

    Ceci est à la base de protocoles tels que HTTPS

    +
    + +
    +

    Éléments de cryptographie (4)

    +

    Le chiffrement assymétrique permet aussi d'avoir la + preuve que quelqu'un est bien Bob!

    + +

    Comment garantir que la personne qui a généré + les clés au départ est bien Bob ? +

    +
    + +
    +

    HTTP: protocole texte « en clair »

    +

    HTTP est un protocole texte, les données ne sont + pas chiffrées (cf. TP3) et sans identification

    + +
    +
    +

    Espionnage de connexion

    +

    Alice représente le client, Bob le serveur et Eve (Eavesdropper) + l'attaquante

    +

    On suppose que Eve est root sur la + machine. Il suffit de lire les paquets qui transitent par la + carte réseau (tcpdump sous Linux). +

    + +

    Ce problème touche tous les protocoles en clair: HTTP, POP, + IMAP, FTP, …. Il peut être résolu grace au chiffrement + de toute la connexion.

    +
    +
    +

    Attaque Man in the middle

    +

    Mallory se place entre Alice (cliente) et Bob (banque), par exemple au + moyen d'un e-mail frauduleux en HTML:

    +
    1. L'émail contient: + + + Bonjour, + veuillez vous connecter à votre banque en cliquant ici: + www.bob.com + +]]> +
    2. +
    3. Alice, insouciante, clique sur le lien +

      + A M B +
      +
    4. +
    5. Mallory peut retransmettre les requêtes entre Bob et + Alice, en les modifiant au passage. Le problème est causé + par un manque d'authentification (Mallory n'a pas a + prouver à Alice qu'il est Bob) +
    6. +
    +
    +
    +

    Solution: HTTPS

    +

    HTTP Secure

    +
    1. Respose sur de la cryptographie assymétrique (pour + l'authentification et le partage de clé) et symétrique (pour le + chiffrement de connexion)
    2. +
    3. Permet d'authentifier les correspondants et de protéger + les données +
    4. +
    5. Suppose l'existence de tiers de confiance Alice + et Bob font confiance à Trent (Trusted Third + Party)
    6. +
    +

    Bob possède des clés publiques et privées + (KBpub + et KBpriv), Trent possède des clés + publiques et privées (KTpub + et KTpriv) +

    +
    +
    +

    HTTPS (détail du protocole)

    +

    Bob et Trent se rencontrent. Trent signe + la clé publique de Bob en calculant +

    + SB=KTpriv(KBpub) +
    + Comme Trent utilise sa clé privée on sait que seul + Trent a pu générer cette signature. De plus, Trent + a rencontré Bob donc il certifie que la + clé KBpub appartient bien à + quelqu'un nommé Bob. +

    +
      +
    1. Alice (client) veut se connecter à Bob. Bob fournit sa + clé publique KBpub et la + signature SB
    2. +
    3. Alice contacte Trent (en qui elle a confiance) et récupère sa clé + publique KTpub. Elle déchiffre la + signature: KTpub(SB) + et vérifie qu'elle retombe bien sur la clé publique de Bob. +
    4. +
    5. Elle peut alors choisir une clé symétrique, la chiffrer + avec KBpub et entammer une + communication chiffrée et authentifiée avec + Bob.
    6. +
    +
    +
    +

    Tiers de confiance

    +

    Les tiers de confiance sont des entités (états, associations, + compagnies privées) qui se chargent de vérifier les clés + publiques d'autres entitées. C'est une + vérification physique (documents administratifs, …). +

    +
    ssl +
    +

    Cette erreur s'affiche quand une signature n'est pas conforme + ou n'a pas pu être vérifiée

    +
    + +
    +

    Tiers de confiance

    +

    Attaques contre les authorités de certifications + (tiers de confiance): difficiles, mais pas impossible. Certains + tiers de confiance sont douteux (états voyous, compagnie + piratées dont les clées privées sont compromises,…)
    + Attaques d'implémentation (plus probables) : on + exploite un bug dans le code des serveurs web ou des + navigateurs
    + Autres faiblesses: HTTPS est en « haut » dans la pile + IP (application). On peut donc avoir connaissance du nombre de + paquet échangés, des adresses IP des participants, la taille + et la fréquence des paquets… (même si on n'en connait pas le + contenu). Cela permet certaines attaques statisties ou de deni + de service. +

    +
    +

    Confidentialité, traîtement des cookies

    +
    +

    Traçage par cookies

    +

    Normalement, un cookie ne peut être + lu que que par le site émetteur (cf. cours 8). But:

    +
      +
    1. Empêcher un tiers de lire des données personnelles + (ok)
    2. +
    3. Empêcher un tiers de savoir quels sites ont été visités + (pas ok)
    4. +
    +
      +
    1. Un site B utilise des publicités pour se rémunérer. Le + site marchand M fournit du code HTML: + <script src="http://marchand.com/pub.js"/> +
    2. +
    3. A visite le site B. Le + code pub.js peut alors faire les choses suivantes: +
        +
      1. Scanner le contenu de la page de B. Possible car le + script est « inclus » dans une page fournie par B
      2. +
      3. Se connecter + àhttp://marchand.com/collecte.php et + passer en paramètre post ou get le + contenu de la récolte
      4. +
      5. http://marchand.com peut alors stocker un + cookie valide pour son domaine avec le contenu de + la récolte d'information +
      6. +
      +
    4. +
    5. + Lorsque A visite le site marchand M, ce dernier + relit son cookie et fait des propositions ciblées. +
    6. + +
    +
    +
    +

    Solutions

    +
      +
    • Désactiver les cookies de « tierce partie » (cookie dont + l'origine n'est pas celle de la page visitée) +
    • +
    • Effacer par défaut tous les cookies quand on quite le + navigateur
    • +
    • Rajouter des exceptions pour certains sites au cas par cas +
    • +
    +

    Nouveau standard du W3C en préparation pour signifier à un + site qu'on ne souhaite pas être suivi (méthode « volontariste + » qui suppose que les sites commerciaux sont gentils et + respectent le protocole)

    +
    +
    +

    Sécurité des cookies de session

    +

    On a vu que les sessions PHP (vrai aussi pour les autres + langages côté serveur) stockent dans un cookie un identifiant + unique. Que se passe-t-il si on vole ce cookie ? (démo) +

    +

    Pas d'autre solution que de faire confiance + au root (solutions partielles basées sur le chiffrement + des disques dur) +

    +
    +

    Attaques par injection de code

    +
    +

    Injection de code Javascript/HTML

    +

    Vulnérabilité: on exploite le fait qu'un site utilise + directement les entrées fournies par l'utilisateur.
    + Exemple: commentaires sur un blog. +

    +
      +
    1. Une page Web utilise un formulaire pour permettre de + poster des commentaires sur un blog: + + Commentaire:
      + ]]><textarea rows="20" cols="60" name="zonetexte"/> + +]]>
      +
    2. +
    3. Un bout de code PHP écrit le commentaire sur la page: + echo "Commentaire #$i: <p>"; + echo $_POST["zonetexte"]; + echo "</p>"; + +
    4. + + +
    +
    +
    +

    Injection de code Javascript/HTML

    + Problème tout ce qui est dans la zone de texte est copié + dans la page HTML de chaque client qui consulte la page + et interprété par son navigateur: + Debut du commentaire + <script type="text/javascript"> + ... //code javascript malicieux + </script> + Fin du commentaire + +
    +
    +

    Injection de code PHP

    +

    Problème lié à l'utilisation de la fonction + eval(command) + command est une chaîne de caractères + considérée comme étant du code PHP et eval exécute + cette chaîne: +

    + + echo eval ("1 + 2 * 3"); // affiche 7 + echo eval ('$x = 4;'); // définit la variable $x + echo $x; // affiche 4 + +

    Il ne faut jamais donner une chaine de caractère de + l'utilisateur comme argument à eval (sauf durant le + TP 9)

    +
    +
    +

    Solutions

    +
      +
    • Ne jamais utiliser eval
    • +
    • Utiliser la fonction htmlspecialchars qui + échappe les + caractères <, >, &, ', "
    • +
    • Utiliser la fonction striptags qui supprime tout + ce qui est une balise
    • +
    • Toujours valider les entrées d'un utilisateur
    • +
    +
    +
    +

    Injection de code SQL

    +

    SQL: language de requête permettant d'interroger des bases de + données. Utilisation classique depuis PHP (on suppose un + formulaire qui met dans le champ "nom" le nom d'un + étudiant): +

    + + $Q = "SELECT * FROM STUDENTS WHERE "; + $Q = $Q . "(NAME = '" . $_POST["nom"] . "');"; + mysql_query($Q); + +

    Si l'utilisateur donne comme nom « Toto », la requête envoyée + à la base est:

    + SELECT * FROM STUDENTS WHERE (NAME = 'Toto'); +

    Affiche toutes les lignes de la table STUDENTS pour + lesquel le nom est Toto

    +
    +
    +

    Jusqu'au jour où …

    +

    ©xkcd
    + +

    + SELECT * FROM STUDENTS WHERE (NAME ='Robert'); + DROP TABLE STUDENTS; --');' + + +
    +
    +

    Ou bien…

    +
    + +
    +
    + + diff --git a/unix_prog_web/xkcd.png b/unix_prog_web/xkcd.png new file mode 100644 index 0000000..530ddc0 Binary files /dev/null and b/unix_prog_web/xkcd.png differ