On reprend le formulaire de connexion du début du chapitre (champs…
Exercice de TD · niveau 3 (difficile) · NSI (première), chapitre 10 — Interagir sur le Web · Client, serveur, GET et POST
Énoncé
On reprend le formulaire de connexion du début du chapitre (champs pseudo, motdepasse, case memoriser, bouton d'envoi). Nour saisit le pseudonyme nour dupont — avec l'espace — et le mot de passe été2026.
- Écrire le corps exact de la requête POST envoyée, quand la case n'est pas cochée.
- Et quand elle est cochée ?
- Le bouton d'envoi apparaît-il dans les données transmises ?
- Écrire l'URL qu'on obtiendrait si le formulaire était en GET. Citer trois endroits où le mot de passe se retrouverait alors.
Corrigé
1. Deux paires seulement :
pseudo=nour+dupont&motdepasse=%C3%A9t%C3%A92026
Deux transformations ont eu lieu, imposées par le format application/x-www-form-urlencoded : l'espace devient + (la notation %20 est également valable), et tout caractère hors de l'alphabet latin de base est codé en UTF-8 puis écrit octet par octet en hexadécimal. Le « é » vaut deux octets, C3 et A9, d'où %C3%A9.
Un contrôle en Python, qui applique exactement la même règle :
from urllib.parse import urlencode
print(urlencode({"pseudo": "nour dupont", "motdepasse": "été2026"}))
# pseudo=nour+dupont&motdepasse=%C3%A9t%C3%A92026
2. La case cochée ajoute une paire, avec la valeur on — c'est la valeur par défaut quand la case ne porte pas d'attribut value :
pseudo=nour+dupont&motdepasse=%C3%A9t%C3%A92026&memoriser=on
C'est le point le plus surprenant du chapitre : une case non cochée n'envoie rien du tout. Elle n'envoie pas memoriser=off, ni memoriser= : elle est absente. Un programme serveur qui écrirait if donnees["memoriser"] == "on" planterait sur une clé manquante ; il faut tester la présence : if "memoriser" in donnees.
3. Non. Le bouton <button type="submit">Se connecter</button> n'a pas d'attribut name : il ne transmet rien. S'il en avait un, il transmettrait sa valeur — et c'est ainsi qu'on distingue deux boutons d'un même formulaire, « Enregistrer » et « Supprimer » par exemple.
4. En GET, les mêmes paires vont dans l'URL :
/verifier?pseudo=nour+dupont&motdepasse=%C3%A9t%C3%A92026
Le mot de passe se retrouverait alors : dans la barre d'adresse (lisible par-dessus l'épaule) ; dans l'historique du navigateur, et donc dans les suggestions de saisie ; dans les journaux du serveur, qui enregistrent les URL demandées et sont conservés des mois. On peut ajouter les favoris, et l'en-tête Referer transmis au site suivant.
Ce qui reste vrai malgré tout : le POST de la question 1 n'est pas plus chiffré que le GET de la question 4. Sur le réseau, motdepasse=%C3%A9t%C3%A92026 circule lisiblement dans les deux cas. Ce que POST change, c'est le nombre d'endroits où la valeur est recopiée et conservée. Le chiffrement, lui, est le travail de HTTPS.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.