Chapitre 1416 minIntermédiaire
Réviser l'E7 : calendrier, erreurs et fiches réflexes
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- planifier tes révisions sur la 2e année et la dernière semaine ;
- éviter les erreurs qui coûtent le plus de points ;
- retrouver la syntaxe SQL de sécurité et les parades aux failles courantes ;
- vérifier la veille que les notions clés te viennent sans hésiter.
1 exercice corrigé
Réviser l'E7 SLAM, c'est combiner trois choses sur la 2e année : les notions des cinq compétences du bloc 3, la pratique sur les annales, et la méthode de l'écrit en 4 heures. Ce chapitre donne un calendrier de révision, de la rentrée de 2e année au jour de l'épreuve, la liste des erreurs qui font perdre le plus de points, avec le réflexe qui les évite, puis sept fiches réflexes à relire la dernière semaine et la veille.
Le calendrier de la 2e année
L'épreuve a lieu en mai, à la date fixée par le calendrier national de la session ; ta convocation te donne le jour, l'heure et le lieu. Les sujets de métropole 2025 et 2026 ont tous deux été passés et publiés en mai.
| Période | Objectif | Actions concrètes |
|---|---|---|
| Septembre et octobre | connaître l'épreuve | lire ce cours en entier ; télécharger les annales ; lire deux sujets sans les traiter |
| Novembre à janvier | consolider les notions | un thème par semaine : risques et RGPD, habilitations et SQL, code à sécuriser, API, journalisation et tests ; les questions des annales correspondantes, cours ouvert |
| Février et mars | passer à l'écrit chronométré | un dossier d'annale par semaine, en temps limité (2,6 minutes par point), sans document ; correction systématique |
| Avril | s'entraîner en conditions réelles | les deux épreuves blanches de ce cours, en 4 heures, puis un sujet complet de métropole |
| Les deux dernières semaines | réviser sans apprendre de nouveau | les fiches réflexes de ce chapitre, le glossaire E7 SLAM, les erreurs ci-dessous |
La dernière semaine
- Un sujet complet traité en 4 heures, le plus récent si possible, puis corrigé avec soin.
- Les fiches réflexes relues deux fois, à voix haute pour les définitions.
- Les dix catégories de l'OWASP Top 10 2021 récitées dans l'ordre, avec un exemple chacune.
- Les articles 32, 33 et 34 du RGPD et les peines de l'article 323-1 du Code pénal sus par cœur.
- La syntaxe de
GRANT,REVOKE,RENAME USER,CREATE VIEW, d'un déclencheur et d'une requête avecGROUP BYetHAVINGécrite une fois de mémoire.
La veille et le jour de l'épreuve
- Deux stylos noirs ou bleus, un crayon, une gomme, une règle, ta convocation et ta pièce d'identité. Ni calculatrice ni document.
- Une montre si la salle n'a pas d'horloge visible : ton plan de temps repose sur des heures de fin.
- Dès que tu reçois le sujet : vérifier qu'il est complet (le nombre de pages est indiqué en première page), lire le barème, écrire tes heures de fin.
Les erreurs qui coûtent des points
| Moment | Erreur | Ce qu'elle coûte | Le réflexe |
|---|---|---|---|
| Lecture | répondre sans avoir lu le contexte ni survolé les documents | des réponses génériques, des noms de tables faux | 20 minutes de lecture et de plan avant la première réponse |
| Lecture | ignorer le paragraphe qui précède une question | l'information clé (« seulement depuis le serveur local ») manque à la réponse | souligner les contraintes dans chaque paragraphe de mission |
| Gestion du temps | passer une heure sur une question difficile | un dossier entier non traité en fin d'épreuve | heures de fin écrites et respectées ; revenir plus tard |
| Gestion du temps | laisser une question vide | tous ses points | une phrase qui nomme la notion vaut toujours mieux qu'un blanc |
| Rédaction | répondre « il faut sécuriser » sans nommer ni expliquer | la quasi-totalité des points de la question | nommer, expliquer, appliquer au cas |
| Rédaction | une justification sans lien avec le cas | la moitié des points | citer l'organisation, la donnée, le document |
| Rédaction | confondre « Citer » et « Justifier » | du temps perdu, ou des points perdus | lire le verbe avant d'écrire |
| Droit | « il faut informer les personnes concernées » pour toute violation | la réponse est fausse si le risque n'est pas élevé | documenter toujours, CNIL s'il y a un risque, personnes si le risque est élevé |
| Droit | confondre chiffrement et hachage | une réponse fausse sur les mots de passe ou les IBAN | hacher ce qu'on vérifie, chiffrer ce qu'on relit |
| SQL | une condition sur COUNT dans le WHERE | la requête ne s'exécute pas | WHERE filtre les lignes, HAVING filtre les groupes |
| SQL | GRANT ALL pour corriger des droits | la faille reste entière | lister les privilèges nécessaires, rien de plus |
| SQL | oublier l'hôte du compte ('appli'@'localhost') | la requête vise un autre compte, ou aucun | toujours écrire nom et hôte |
| Code | recopier tout le code au lieu des lignes modifiées | du temps perdu, une correction difficile à trouver | numéro de ligne et ligne complète, rien d'autre |
| Code | == pour comparer deux chaînes en Java | une méthode qui ne marche pas | equals |
| Code | return false dans le else d'une boucle de recherche | la méthode ne regarde que le premier élément | le return false après la boucle |
| Code | « utiliser une requête préparée » face à un prepare() sur une requête concaténée | la cause réelle n'est pas identifiée | vérifier que les valeurs sont liées à des marqueurs |
| Code | contrôler les droits côté client (bouton masqué) | la faille n'est pas corrigée | vérifier sur le serveur, à chaque requête, avec l'identité de la session ou du jeton |
| API | renvoyer 401 à un utilisateur authentifié mais non autorisé | une réponse fausse | 401 : qui es-tu ? 403 : tu n'as pas le droit |
| Relecture | des numéros de question absents ou faux | des réponses que le correcteur ne trouve pas | un numéro par réponse, un dossier par page |
Les fiches réflexes
Ces sept fiches résument chacune ce qu'il faut savoir sans hésiter le jour de l'E7 SLAM : la méthode, les notions juridiques, la syntaxe SQL de sécurité, les failles et leurs parades, l'authentification, la journalisation. Elles se relisent la dernière semaine et la veille. Chaque fiche renvoie au chapitre qui détaille la notion ; pour les définitions des termes, utilise aussi le glossaire E7 SLAM.
Fiche 1 : la méthode de l'épreuve
- Format : 4 heures, coefficient 4, sans document ni calculatrice, 80 points en deux à quatre dossiers, sujet propre à SLAM.
- Temps : 15 min de lecture, 5 min de plan, environ 2,6 minutes par point, 15 min de relecture. Des heures de fin écrites et respectées.
- Ordre : le dossier le plus sûr d'abord, jamais le plus gros en dernier.
- Réponse : nommer, expliquer, appliquer au cas ; corriger si on te le demande.
- Code : seulement les lignes modifiées, avec leur numéro.
- Documentation du sujet : l'utiliser telle quelle, même si elle diffère de ce que tu connais.
- Détails : lire le sujet, rédiger une réponse.
Fiche 2 : risques
| Notion | À retenir |
|---|---|
| DICP | disponibilité, intégrité, confidentialité, preuve (traçabilité, non-répudiation) |
| Justifier un niveau | quelle donnée ou action, quelle conséquence d'une atteinte, pour qui |
| Scénario de risque | source de risque, vulnérabilité, événement redouté, impacts |
| Rançongiciel | sauvegardes déconnectées et testées, mises à jour, MFA, cloisonnement, moindre privilège, EDR, sensibilisation |
| Hameçonnage | expéditeur imité, lien trompeur, urgence, demande inhabituelle, fautes ; parades : filtrage, MFA, sensibilisation |
| Sauvegarde | règle 3-2-1, une copie déconnectée ou immuable, restaurations testées ; le RAID n'est pas une sauvegarde |
| Archivage | conservation longue de données figées (preuve, obligation légale), confidentialité et intégrité vérifiées (chiffrement, empreinte) |
| PCA et PRA | continuer pendant l'incident ; redémarrer après ; DMIA (durée d'interruption) et PDMA (perte de données) admissibles |
Fiche 3 : RGPD et droit
| Texte | À retenir |
|---|---|
| RGPD art. 4 | donnée personnelle : toute information sur une personne physique identifiée ou identifiable, directement ou indirectement |
| RGPD art. 9 | données sensibles : origine, opinions, religion, syndicat, génétique, biométrie d'identification, santé, vie et orientation sexuelles |
| RGPD art. 25 | protection des données dès la conception et par défaut |
| RGPD art. 32 | sécurité adaptée au risque ; chiffrement et pseudonymisation « selon les besoins » |
| Pseudonymisation | donnée encore personnelle, le RGPD s'applique ; anonymisation : réidentification impossible, le RGPD ne s'applique plus |
| RGPD art. 33 | violation : documenter toujours ; notifier la CNIL si risque, dans les meilleurs délais et si possible sous 72 h ; le sous-traitant prévient le responsable |
| RGPD art. 34 | informer les personnes si le risque est élevé |
| RGPD art. 35 | AIPD avant un traitement à risque élevé |
| RGPD art. 83 | jusqu'à 20 M€ ou 4 % du chiffre d'affaires mondial |
| Code pénal 323-1 | accès ou maintien frauduleux : 3 ans et 100 000 € ; 5 ans et 150 000 € si données supprimées ou modifiées |
| Code pénal 323-2 et 323-3 | entrave au fonctionnement ; introduction, extraction, modification de données : 5 ans et 150 000 € |
| Code civil 1366 | l'écrit électronique vaut l'écrit papier si l'auteur est identifié et l'intégrité garantie |
| Charte informatique | opposable si annexée au règlement intérieur (avis du CSE, inspection du travail, dépôt, affichage) |
| Données de santé | hébergement par un hébergeur certifié HDS (Code de la santé publique, art. L1111-8) |
Détails : analyse de risques et RGPD.
Fiche 4 : SQL de sécurité (MySQL 8.4)
-- Comptes et privilèges
CREATE USER 'appli'@'localhost' IDENTIFIED BY 'mdp';
RENAME USER 'appli'@'%' TO 'appli'@'localhost'; -- les privilèges suivent
GRANT SELECT, INSERT, UPDATE, DELETE ON base.* TO 'appli'@'localhost';
REVOKE ALL PRIVILEGES ON base.* FROM 'appli'@'localhost'; -- même niveau que le GRANT
ALTER USER 'appli'@'localhost' IDENTIFIED BY 'nouveau';
SHOW GRANTS FOR 'appli'@'localhost';
-- Vue qui restreint les colonnes
CREATE VIEW v_public AS SELECT id, nom FROM Client;
GRANT SELECT ON base.v_public TO 'lecteur'@'localhost';
-- Déclencheur de contrôle
CREATE TRIGGER t BEFORE INSERT ON T FOR EACH ROW
BEGIN
IF NEW.x < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'refusé'; END IF;
-- modifier la ligne : SET NEW.statut = '…'; (jamais d'UPDATE sur T)
END;
-- Chiffrement d'une colonne
ALTER TABLE T MODIFY col VARBINARY(200);
UPDATE T SET col = AES_ENCRYPT(col, 'cle');
SELECT CAST(AES_DECRYPT(col, 'cle') AS CHAR) AS col FROM T;
-- Audit
SELECT idUtilisateur, COUNT(*) AS nb FROM Log
WHERE operation = 'delete' GROUP BY idUtilisateur HAVING COUNT(*) > 5;
-- Transaction : tout ou rien (PDO : beginTransaction, commit, rollBack)
START TRANSACTION;
UPDATE Utilisateur SET idRole = 3 WHERE id = 42;
INSERT INTO HistoHabilitation (idUtilisateur, nouveauRole) VALUES (42, 3);
COMMIT; -- ou ROLLBACK;
Détails : habilitations et SQL.
Fiche 5 : failles et parades
| Faille (OWASP 2021) | Signe dans le code | Parade |
|---|---|---|
| Contrôle d'accès défaillant (A01) | un identifiant venu de l'URL ou d'un champ caché, sans vérification d'appartenance | vérifier côté serveur, à chaque requête, avec l'identité de la session ou du jeton ; WHERE id = :id AND idClient = :idClient |
| Défaillance cryptographique (A02) | md5(), sha1(), hash('sha256', …) sur un mot de passe ; mot de passe en clair | password_hash() et password_verify() (bcrypt, Argon2) ; HTTPS |
| Injection SQL (A03) | une variable dans le texte de la requête | requête préparée avec marqueurs liés ; compte aux droits minimaux |
| XSS (A03) | echo $saisie | htmlspecialchars($x, ENT_QUOTES, 'UTF-8') ; CSP ; cookie HttpOnly |
| CSRF | formulaire sensible sans jeton, action par GET | jeton anti-CSRF vérifié avec hash_equals ; SameSite ; POST |
| Mauvaise configuration (A05) | message d'erreur détaillé, commentaire HTML technique, mot de passe dans le code | message générique, secrets en variables d'environnement |
| Composants obsolètes (A06) | dépendance jamais mise à jour | inventaire, composer audit, npm audit, mises à jour |
| Authentification faible (A07) | jwt.decode, jeton sans expiration, essais illimités | jwt.verify, expiration courte, limitation des tentatives, MFA |
| Réinitialisation faible (A07) | mot de passe envoyé par courriel, code court, lien sans expiration | lien HTTPS avec un jeton random_bytes, empreinte stockée, usage unique, expiration de 24 h au plus, message générique |
| Journalisation insuffisante (A09) | aucune trace des actions sensibles | traces CNIL, alertes |
Détails : sécuriser du code.
Fiche 6 : API et authentification
- Codes : 200, 201 (créé), 204 (supprimé), 400, 401 (non authentifié), 403 (non autorisé), 404, 405 (méthode refusée), 429, 500.
- Méthodes dangereuses :
PUT,PATCH,DELETE, contrôle d'autorisation obligatoire dans l'API. - Clé d'API : identifie une application partenaire, longue durée, jamais transmise à un utilisateur final.
- Jeton d'accès : identifie un utilisateur, courte durée ; jeton de rafraîchissement : renouvelle le jeton d'accès.
- JWT : en-tête, charge utile lisible (pas chiffrée), signature ; toujours vérifier signature, algorithme et expiration.
- HTTPS : confidentialité, intégrité, authentification du serveur ; TLS 1.2 minimum.
- MFA : deux facteurs de natures différentes (savoir, posséder, être).
- SSO : OpenID Connect sur OAuth 2.0 ; un compte à protéger par MFA.
- Transfert de fichier : SFTP ou plateforme HTTPS authentifiée, lien qui expire, fichier chiffré (GPG), empreinte ou signature vérifiée à l'arrivée.
Détails : API et authentification.
Fiche 7 : journalisation et tests
- Une trace : auteur individuellement identifié, horodatage, nature de l'opération, référence des données ; adresse IP ou équipement. Jamais de mot de passe, pas de copie des données.
- Protection : stockage séparé, écriture seule, horodatage et signature, accès restreint.
- Durée : entre six mois et un an dans le cas général (CNIL, délibération n° 2021-122).
- Exploitation : analyse automatique et alertes ; utilisateurs informés.
- Signatures d'attaque :
401en rafale (force brute), identifiants qui se suivent (énumération),404en série (balayage), apostrophes etUNION(injection). - Tests : unitaires (
assertTrue,assertFalse,assertEquals), cas autorisé, cas refusé, cas limites ; non-régression ; test d'intrusion autorisé ; analyse statique et dynamique ; audit de code.
Détails : journalisation et tests.
Pour aller plus loin
Les notions de ces fiches s'appuient sur d'autres cours du site : SQL, Procédures stockées et triggers, Sécurité applicative, Droit du numérique et RGPD, Analyse de risques, Authentification et habilitations, Cryptographie, Journalisation et réponse à incident, PHP et MySQL, Programmation orientée objet et Tests. Pour les dernières heures, le récapitulatif Quoi réviser pour l'E7 SLAM classe les priorités.
Exercice
Exercice Corriger une copie Réussi À revoir
Voici la copie d'un candidat sur trois questions. Repère toutes les erreurs et réécris chaque réponse.
- Question : « Écrire la requête donnant, pour chaque utilisateur ayant réalisé plus de 10 suppressions dans la journée, le nombre de suppressions. » Réponse :
SELECT idUtilisateur, COUNT(*) FROM Log WHERE operation = 'delete' AND COUNT(*) > 10 AND DATE(dateHeure) = CURDATE(); - Question : « La violation présente un risque élevé pour les personnes. Indiquer les obligations du responsable de traitement. » Réponse : « Il doit prévenir la police sous 24 heures. »
- Question : « Le compte
appline doit que lire la tableproduit, depuis le serveur local. Écrire la requête. » Réponse :GRANT ALL ON boutique.produit TO appli;
Voir la réponseMasquer la réponse de l'exercice
- Erreurs : condition sur
COUNT(*)dans leWHERE(refusée par le SGBD), absence deGROUP BY, colonne du compte sans alias. Correction :SELECT idUtilisateur, COUNT(*) AS nbSuppressions FROM Log WHERE operation = 'delete' AND DATE(dateHeure) = CURDATE() GROUP BY idUtilisateur HAVING COUNT(*) > 10; - Erreurs : la police n'est pas l'autorité à notifier, le délai est faux, l'information des personnes est oubliée alors que le risque est élevé. Correction : « Le responsable de traitement documente la violation dans son registre (article 33, paragraphe 5, du RGPD), la notifie à la CNIL dans les meilleurs délais et, si possible, 72 heures au plus tard après en avoir pris connaissance (article 33), et, le risque étant élevé, en informe les personnes concernées dans les meilleurs délais (article 34). Il peut en outre porter plainte s'il s'agit d'un acte malveillant. »
- Erreurs :
ALLau lieu deSELECT, compte sans hôte (en MySQL,appliseul signifie'appli'@'%'). Correction :GRANT SELECT ON boutique.produit TO 'appli'@'localhost';Si le compte existe avec l'hôte%, il faut d'abord le renommer :RENAME USER 'appli'@'%' TO 'appli'@'localhost';
Tu avais trouvé ?