Un site vérifie l'âge de l'utilisateur uniquement en JavaScript
Exercice de TD · niveau 2 · NSI (première), chapitre 10 — Interagir sur le Web · Client, serveur, GET et POST
Énoncé
Un site vérifie l'âge de l'utilisateur uniquement en JavaScript. Décrire comment contourner cette vérification, et ce que le serveur aurait dû faire.
Corrigé
Trois façons de contourner, de la plus simple à la plus radicale.
- Répondre ce qu'il faut. La vérification demande une date de naissance : il suffit d'en saisir une autre. Aucune compétence technique.
- Modifier la page. Les outils de développement permettent d'effacer le gestionnaire, de changer la valeur d'un champ caché ou de rendre visible ce qui était masqué. La page est un document que l'utilisateur possède.
- Ne pas ouvrir la page du tout. La requête finale peut être envoyée directement, depuis un terminal :
curl -X POST https://exemple.fr/acces -d "age=42"
Le serveur reçoit alors une requête parfaitement conforme, sans qu'aucune ligne de JavaScript n'ait jamais été exécutée. C'est le point décisif : le serveur ne peut pas savoir si la page a été utilisée.
Ce que le serveur aurait dû faire. Refaire la vérification lui-même, à la réception, et la refaire à chaque requête protégée — pas seulement à la première. En pratique il ne peut pas se contenter de croire un champ age envoyé par le client : il faut que l'âge vienne d'une information dont lui répond (un compte vérifié, une session ouverte après une preuve d'identité).
Ce que cet exercice ne dit pas : qu'il faudrait supprimer la vérification côté client. Elle reste utile — elle prévient l'utilisateur honnête immédiatement, sans aller-retour. Elle est une ergonomie, jamais une barrière. C'est la formulation exacte du cours : le serveur ne fait jamais confiance à ce que le client lui envoie.
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.