Ce que tu sauras faire : Intégrer la sécurité dans un projet de développement dès l'expression du besoin : écrire des exigences de sécurité vérifiables, modéliser les menaces d'une application avec STRIDE, appliquer les principes de conception sûre, protéger les données dès la conception, sécuriser la chaîne de développement et vérifier la conformité d'une application à un référentiel (OWASP Top 10, OWASP ASVS).
2 h de cours 10 exercices corrigés 10 questions de quiz
Cherche d’abord au brouillon, puis ouvre le corrigé. Les exercices vont du plus simple au plus exigeant : les points indiquent leur difficulté. Compare ta démarche, pas seulement ton résultat.
Sauf indication contraire, les exercices se situent chez Vellacor
Services Numériques (Niort), au pôle développement d’Anaïs Lecoq, en
octobre 2026, sur les applications de Kervanet Hôtels & Résidences.
Échelles de Vellacor (B3-01) : gravité (G) et vraisemblance (V) de 1 à 4
; criticité = G × V ; zones faible (1 à 3), modéré (4 et 6), élevé (8 et
9), critique (12 et 16) ; à criticité égale, le plus grave d’abord.
Politique de délais des composants : 7 jours (critique), 30 jours
(élevée), 90 jours (moyenne), 180 jours (faible) après la publication de
l’avis. Les noms de composants, les numéros d’avis et les mots de passe
sont fictifs.
Exercice 1
Les mots de la conception sûre
Application
Associe chaque terme (1 à 10) à sa définition (A à J).
Terme
Définition
1. Sécurité dès la conception
A. Inventaire des composants d’une application, avec version,
origine et licence
2. Sécurité par défaut
B. Séparation entre deux zones qui n’ont pas le même niveau de
confiance
3. Échec sûr
C. Liste d’exigences de sécurité vérifiables, organisée en trois
niveaux
4. Moindre privilège
D. Traiter la sécurité comme une exigence du projet, depuis
l’expression du besoin
5. Validation par liste blanche
E. Quand un contrôle ne peut pas aboutir, l’application refuse
6. Frontière de confiance
F. Le réglage livré, sans action de l’utilisateur, est le plus sûr
raisonnable
7. STRIDE
G. N’accepter une donnée que si elle correspond exactement à ce qui
est attendu
8. Nomenclature logicielle (SBOM)
H. Classement de sensibilisation des dix grandes catégories de
risques des applications web
9. OWASP ASVS
I. Chaque compte, y compris celui de l’application, reçoit seulement
les droits nécessaires
10. OWASP Top 10
J. Grille de six familles de menaces pour analyser la conception
d’une application
Voir le corrigé détaillé
1 → D ; 2 → F ; 3 → E ; 4 → I ; 5 → G ; 6 → B ; 7 → J ; 8 → A ; 9 → C
; 10 → H.
Piège
Sécurité par défaut (2) et échec
sûr (3) se confondent souvent. La première porte sur
l’état de départ (ce qui est livré : droits fermés,
fonctions dangereuses désactivées) ; la seconde sur le
comportement en cas de problème (un contrôle qui plante
répond « non »). Une application peut respecter l’une sans l’autre.
Exercice 2
Classer des menaces avec STRIDE
Application
Pour chaque menace sur KerMaint ou sur l’API KerResa, indique la
famille STRIDE principale et la propriété de sécurité atteinte.
Un technicien modifie dans la requête envoyée par sa tablette le
numéro de l’intervention qu’il valide, pour clôturer celle d’un
collègue.
Une page d’erreur de l’API KerResa affiche le nom de la table et
la requête SQL qui a échoué.
Un développeur parti de Vellacor se connecte au back-office de
KerResa avec un jeton qui n’a pas été révoqué, en se faisant passer pour
une plateforme partenaire.
Dans un projet d’API d’un autre client de Vellacor, aucun appel
reçu n’est journalisé : un partenaire peut affirmer qu’il n’a jamais
envoyé une annulation sans que personne puisse prouver le
contraire.
Un utilisateur du profil Consultation obtient l’écran
d’administration en ajoutant &profil=Administrateur à
l’adresse de la page.
Un robot appelle 500 fois par seconde la recherche de
disponibilités de KerResa.
Le registre PDF des contrôles d’un établissement est accessible
en changeant le numéro dans son adresse.
Un administrateur modifie la date d’une intervention directement
dans la base, sans laisser aucune trace.
Voir le corrigé détaillé
Famille STRIDE
Propriété atteinte
Pourquoi
a)
T falsification
intégrité
une donnée de la requête est modifiée pour agir sur un objet qui
n’est pas le sien (on peut aussi y voir une élévation : B3SLAM-03 traite
le contrôle de l’objet)
b)
I divulgation
confidentialité
des informations internes (table, requête) sont révélées
c)
S usurpation
authenticité
le développeur se fait passer pour une plateforme avec un jeton qui
n’est pas le sien
d)
R répudiation
preuve
sans journal, l’action ne peut pas être imputée
e)
E élévation de privilèges
autorisation
un utilisateur obtient des droits d’administrateur en manipulant un
paramètre ; le profil ne doit jamais venir du client
f)
D déni de service
disponibilité
saturation du service par un volume de requêtes
g)
I divulgation
confidentialité
un document est lisible par qui n’en a pas le droit (la cause est un
contrôle d’accès absent)
h)
R répudiation (et T
falsification)
preuve, intégrité
la modification n’est pas traçable ; elle est aussi non autorisée si
l’administrateur n’avait pas à le faire
Astuce
Quand deux familles semblent possibles, demande-toi ce que
l’attaquant obtient : une identité (S), une
modification (T), un déni (R), une information (I), une indisponibilité
(D), un droit (E). La famille principale est celle de l’objectif ; la
cause (un contrôle absent) donne la mesure.
Exercice 3
Des exigences vérifiables
Analyse
Franck Guillou demande une évolution du module préventif : « Le
responsable doit pouvoir suspendre un plan pendant la
fermeture d’un établissement, et exporter le registre des
contrôles en PDF pour l’assureur. » Le compte rendu de
l’atelier contient les phrases suivantes, rédigées par un commercial
:
« La suspension est sécurisée. »
« L’export est réservé aux bonnes personnes. »
« Les erreurs sont bien gérées. »
« On sait qui a suspendu quoi. »
Explique en deux phrases pourquoi ces formulations ne sont pas
des exigences de sécurité.
Réécris chacune sous la forme d’une exigence vérifiable
(identifiant EXS-10 à EXS-13, formulation testable, moyen de
vérification).
Écris le récit utilisateur de la suspension et deux critères
d’acceptation au format « Étant donné / Quand / Alors », dont un
scénario de sécurité qui doit échouer.
Rédige un cas d’abus (récit d’attaquant ou d’utilisateur
malveillant) lié à la suspension, et l’exigence qui y répond.
Voir le corrigé détaillé
a) Ces phrases décrivent une
intention, pas une condition : « sécurisée », « bonnes
personnes », « bien gérées » ne disent ni ce qui doit être refusé, ni à
qui, ni comment le vérifier. Aucun test ne peut prouver qu’elles ne sont
pas respectées : elles ne protègent donc rien et ne peuvent pas fonder
une réserve à la recette.
b) Une réponse possible :
Id
Exigence
Vérification
EXS-10
Seul le profil Responsable peut suspendre ou réactiver un plan ; le
contrôle est fait par le serveur à chaque requête ; tout autre profil
reçoit un refus, journalisé.
appel direct de l’action avec un compte Technicien et un compte
Consultation : refus ; avec un compte Responsable : succès
EXS-11
L’export PDF du registre d’un établissement n’est accessible qu’au
profil Responsable ; l’adresse de l’export ne suffit pas à l’obtenir
(contrôle des droits à chaque téléchargement).
téléchargement par l’adresse directe sans session et avec un compte
Technicien : refus
EXS-12
En cas d’erreur lors de la suspension ou de l’export, l’utilisateur
voit un message générique et une référence ; aucun détail technique
(requête, chemin, compte) n’est affiché ; le détail est journalisé ; la
suspension est annulée entièrement si elle échoue.
erreur de base provoquée en recette ; lecture de l’écran et du
journal ; contrôle que le plan est resté dans son état initial
EXS-13
Chaque suspension et réactivation est journalisée avec le compte, la
date et l’heure en temps universel, le plan, l’ancien et le nouvel état
; le journal n’est pas modifiable par les utilisateurs de
l’application.
scénario de recette puis lecture du journal ; tentative de
modification du journal avec le compte applicatif : refus
c)US7 — En tant que responsable technique, je
veux suspendre les plans d’un établissement pendant sa fermeture afin de
ne pas générer de contrôles inutiles.
Scénario 1 : Étant donné Franck Guillou connecté avec le profil
Responsable et le plan « Contrôle mensuel ascenseur A » actif, quand il
suspend le plan, alors le plan passe à l’état « suspendu », aucune
intervention n’est générée pendant la suspension et l’action est
journalisée.
Scénario 2 (sécurité) : Étant donné Mathis Le Goff connecté avec le
profil Technicien, quand il envoie au serveur une demande de suspension
du même plan, alors la demande est refusée, le plan reste actif et le
refus est journalisé.
d) Cas d’abus : « En tant que technicien en
retard sur ses contrôles, je veux suspendre les plans en retard afin
qu’ils n’apparaissent plus en orange. » Exigences qui y répondent :
EXS-10 (seul le Responsable suspend) et EXS-13 (toute suspension est
tracée) ; on peut ajouter une règle : « une suspension porte une date de
fin obligatoire et un motif ».
Piège
Ne confonds pas exigence et solution technique. « Utiliser un
framework sécurisé » n’est pas une exigence : c’est un moyen. L’exigence
dit ce qui doit être garanti et comment on le
vérifie ; le développeur choisit ensuite le moyen.
Exercice 4
Niveaux de l’ASVS et délais des composants
Calcul
Partie A. L’ASVS 5.0.0 compte 70 exigences de niveau
1, 183 de niveau 2 et 92 de niveau 3.
Calcule le nombre total d’exigences et la part de chaque niveau
(en %, à 0,1 près).
Une application qui vise le niveau 2 doit satisfaire toutes les
exigences des niveaux 1 et 2. Combien, et quelle part du total
?
La charte de Vellacor fixe L1 pour toute application et L2 pour
toute application exposée sur Internet ou traitant des données de
clients. Quel niveau pour KerResa ? pour KerMaint ? Justifie.
Partie B. Le 20/10/2026, la veille de Sarah relève
quatre avis concernant des composants encore en version vulnérable dans
les applications de Vellacor.
Avis
Gravité
Publié le
A
critique
14/10/2026
B
élevée
25/09/2026
C
moyenne
30/06/2026
D
faible
01/08/2026
Calcule la date limite de mise à jour de chaque composant et le
nombre de jours restants (ou de dépassement) au 20/10/2026.
Dans quel ordre Sarah doit-elle traiter ces avis ?
Justifie.
Voir le corrigé détaillé
a) Total = 70 + 183 + 92 = 345
exigences.
L1 : 70 ÷ 345 = 20,3 % ;
L2 : 183 ÷ 345 = 53,0 % ;
L3 : 92 ÷ 345 = 26,7 %.
b) Niveau 2 = L1 + L2 = 70 + 183 = 253
exigences, soit 253 ÷ 345 = 73,3 % du total.
(L’ASVS annonce « environ 70 % » : le calcul le confirme.)
c) KerResa est exposée sur Internet et traite les
données des clients : L2. KerMaint est interne et ne
traite pas de données de clients (les noms des techniciens sont des
données de salariés) : L1, complété des exigences L2
que la modélisation des menaces rend utiles (journalisation, gestion des
erreurs, secrets). Le niveau se justifie par
l’exposition et la sensibilité des
données, pas par la taille de l’application.
d) Date limite = date de publication + délai de la
politique.
Avis
Gravité
Publié le
Délai
Date limite
Situation au 20/10/2026
A
critique
14/10/2026
7 j
21/10/2026
reste 1 jour
B
élevée
25/09/2026
30 j
25/10/2026
reste 5 jours
C
moyenne
30/06/2026
90 j
28/09/2026
dépassé de 22 jours
D
faible
01/08/2026
180 j
28/01/2027
reste 100 jours
e) Ordre : C d’abord (déjà hors
délai : non-conformité à la politique, à régulariser et à signaler à
Anaïs), puis A (critique, demain), puis
B, enfin D. On peut défendre A avant C
si la faille A est activement exploitée et le composant exposé : la
gravité réelle compte plus que l’ordre administratif ; il faut alors
l’écrire.
Astuce
Pour les dates, compte les jours mois par mois : du 30/06 au 28/09,
il y a 31 (juillet) + 31 (août) + 28 = 90 jours. Un tableur ou
date -d "2026-06-30 + 90 days" sous Linux évite les
erreurs.
Exercice 5
Relire un prototype
Analyse
Romain a écrit en septembre, pour une démonstration, un prototype
d’enregistrement des plans préventifs. Avant de l’intégrer, Anaïs
demande une revue de code à Sarah. Extrait :
<?php// enregistrer_plan.php (prototype de démonstration, à ne pas reproduire)ini_set('display_errors','1');$pdo=newPDO('mysql:host=localhost;dbname=kermaint','root','Exemple-2026!');function peutModifier($profil) { return$profil!='Technicien'; }if (peutModifier($_SESSION['profil'] ??null)) {try {$donnees=$_POST;// tous les champs reçus$champs=implode(', ',array_keys($donnees));$marques=':'.implode(', :',array_keys($donnees));$req=$pdo->prepare("INSERT INTO plan_preventif ($champs) VALUES ($marques)");$req->execute($donnees); } catch (PDOException$e) {echo'Erreur : '.$e->getMessage(); }}
Relève au moins cinq défauts de sécurité de cet extrait. Pour
chacun, cite la ligne, explique le risque et nomme le principe de
conception non respecté.
La requête est « préparée ». Pourquoi n’est-elle pas sûre pour
autant ?
Propose une version corrigée de la fonction d’enregistrement, en
t’appuyant sur les modules communs du cours (erreurs.php,
config.php, droits.php,
validation.php), et indique les essais qui prouvent qu’elle
fonctionne.
gestion des erreurs sans fuite, sécurité par défaut
new PDO(…, 'root', …)
compte d’administration de la base
une faille donne tous les droits sur toutes les bases
moindre privilège
'Exemple-2026!' dans le code
secret écrit en dur
le mot de passe est dans le dépôt, sur chaque poste, dans les
sauvegardes
secrets hors du code
return $profil != 'Technicien';
liste noire
tout ce qui n’est pas « Technicien » est autorisé : le profil
Consultation, un profil créé plus tard, et même une session sans profil
(null)
refus par défaut (liste blanche), échec sûr
$donnees = $_POST; puis noms de colonnes tirés des
clés
affectation de masse ; aucune validation
l’utilisateur choisit les champs écrits (par exemple
actif) et leurs valeurs
validation par liste blanche à la frontière
echo 'Erreur : ' . $e->getMessage();
message technique renvoyé
divulgation (compte, serveur, morceau de requête)
gestion des erreurs sans fuite
absence de journalisation
aucune trace de qui a créé le plan
répudiation
traçabilité
b) La préparation protège les
valeurs transmises par execute() : elles
ne peuvent pas devenir du SQL. Mais ici les noms de
colonnes sont collés dans le texte de la requête à partir des
clés envoyées par l’utilisateur : cette partie n’est pas protégée par la
préparation, et l’utilisateur décide des colonnes écrites. Une requête
préparée doit avoir un texte fixe, écrit par le
développeur.
c) Version corrigée, qui réutilise les modules
communs du cours :
<?phpdeclare(strict_types=1);require__DIR__.'/erreurs.php';// pas d'affichage d'erreur, journal + référencerequire__DIR__.'/config.php';// secrets lus dans l'environnementrequire__DIR__.'/droits.php';// refus par défautrequire__DIR__.'/validation.php';// normalisation + liste blanchefunction enregistrerPlan(PDO$pdo,?string$profil,array$saisie):string{if (!peutFaire($profil,'gerer_plan')) {return'refusé : droit insuffisant'; } [$plan,$erreurs] = validerPlan($saisie);if ($plan===null) {return'refusé : '.implode(' ',$erreurs); }$req=$pdo->prepare('INSERT INTO plan_preventif (id_equip, libelle, periodicite, prochaine_echeance, actif) VALUES (:id_equip, :libelle, :periodicite, :premiere_echeance, 1)');$req->execute($plan);// seuls les champs validés partent vers la basereturn'enregistré (plan '.$pdo->lastInsertId() .')';}
En production, la connexion est ouverte avec le compte
kermaint_app et le mot de passe obtenu par
parametresBase(). Pour l’essai, la fonction est appelée sur
une base SQLite en mémoire qui contient la table
plan_preventif :
Responsable : enregistré (plan 1)
Technicien : refusé : droit insuffisant
Consultation : refusé : droit insuffisant
Responsable + "actif" : refusé : Champ non prévu : actif
Lignes en base : 1
Les essais prouvent : un essai positif (le
Responsable enregistre), deux essais négatifs de droits
(Technicien, Consultation), un essai négatif de validation (champ
ajouté), et le contrôle final qu’une seule ligne a été écrite. Le texte
de la requête est fixe ; la valeur de actif est imposée par
le code (1, sécurité par défaut). Il resterait à journaliser la création
(EXS-03).
Piège
Corriger seulement le mot de passe (le passer en variable
d’environnement) en gardant root ne suffit pas : le défaut
principal est le compte. Un secret bien rangé qui donne
tous les droits reste dangereux.
Exercice 6
Les menaces de la tâche nocturne
Analyse
Chaque nuit à 5 h, une tâche planifiée de KV-KERMAINT
lit les plans actifs, crée les interventions préventives des 7 jours
suivants (règle RG4) et envoie un courriel au responsable pour chaque
contrôle non conforme de la veille. Elle se connecte à la base avec le
compte kermaint_app et envoie les courriels par le serveur
de messagerie de Kervanet. Les messages de la tâche sont écrits dans un
fichier de journal lisible par tous les comptes du serveur.
Sarah et Romain ont relevé six menaces, avec leur évaluation.
Code
Menace
G
V
a
Un plan modifié en base avec une périodicité de 0 fait tourner la
tâche en boucle
2
3
b
La tâche utilise kermaint_app, qui peut aussi modifier
les comptes des techniciens
3
2
c
Un courriel de non-conformité contient tout le détail du contrôle et
part vers une adresse erronée
2
2
d
Le journal de la tâche, lisible par tous, contient la chaîne de
connexion avec le mot de passe
3
3
e
La tâche ne s’exécute pas une nuit, sans que personne ne le
voie
1
3
f
Un attaquant qui a pris la main sur le serveur modifie le script de
la tâche
3
1
Dessine (ou décris) le diagramme de flux de données de la tâche :
entités, traitement, stockages, flux, frontières de confiance.
Donne la famille STRIDE de chaque menace.
Calcule la criticité de chaque menace, indique sa zone et classe
les menaces.
Pour chaque menace, propose une mesure de conception et indique
le principe qu’elle applique.
Voir le corrigé détaillé
a) Diagramme de flux de données :
traitement : la tâche nocturne (planifiée à 5 h sur
KV-KERMAINT) ;
stockages : la base kermaint (lecture
des plans, écriture des interventions) ; le fichier de journal de la
tâche ;
entités externes : le serveur de messagerie ; le
responsable technique (destinataire des courriels) ; le planificateur du
système (qui déclenche la tâche) ;
frontières de confiance : entre la tâche et la base
(compte applicatif), entre le serveur et la messagerie (sortie vers un
autre système), et entre le journal et les autres comptes du serveur (le
journal est lisible par tous : la frontière n’est pas protégée).
b) et c) Criticité = G × V ; classement par
criticité puis par gravité.
Rang
Menace
STRIDE
G
V
Criticité
Zone
1
d — mot de passe dans le journal lisible par tous
I (divulgation)
3
3
9
élevé
2
b — compte trop puissant pour la tâche
E (élévation de privilèges)
3
2
6
modéré
3
a — périodicité 0, tâche en boucle
D (déni de service), causé par une donnée falsifiée ou erronée
2
3
6
modéré
4
c — courriel détaillé vers une adresse erronée
I (divulgation)
2
2
4
modéré
5
f — script de la tâche modifié
T (falsification)
3
1
3
faible
6
e — tâche non exécutée sans alerte
R / D (absence de trace, service rendu indisponible)
1
3
3
faible
À criticité égale (3), f passe avant e, car sa gravité est plus
forte.
d) Mesures :
Menace
Mesure de conception
Principe
d
ne jamais journaliser la chaîne de connexion ni un secret ; journal
lisible par le seul compte du service et les administrateurs ; changer
le mot de passe exposé
secrets hors du code et des journaux ; moindre privilège
b
compte de base dédié à la tâche : lecture des plans, insertion des
interventions, rien d’autre
moindre privilège
a
revalider les données lues en base (périodicité ∈ {1, 3, 6, 12}) ;
plafond d’interventions créées par nuit avec alerte ; contrainte
CHECK dans la base
validation à chaque frontière, défense en profondeur, échec sûr
c
courriel minimal (« contrôle non conforme, voir KerMaint,
intervention n° … »), sans détail ; adresse du destinataire tirée de
l’annuaire
minimisation, protection des données par défaut
f
droits d’écriture sur le script réservés à root ; livraison signée
et vérifiée (B3-06) ; journal des modifications
moindre privilège, intégrité de la chaîne
e
la tâche écrit un compte rendu ; la supervision alerte si aucun
compte rendu n’est arrivé à 5 h 30
traçabilité, détection
Astuce
La menace a) montre qu’une donnée lue dans sa propre
base franchit aussi une frontière : quelqu’un a pu l’écrire par
un autre chemin (requête manuelle, autre application). La défense en
profondeur revalide ce qui est critique pour le traitement.
Exercice 7
Les réclamations des clients
Droit
Gwenaëlle Le Bihan voudrait ajouter à KerMaint une fonction «
réclamations » : quand un client se plaint d’une panne à la réception,
le réceptionniste saisit dans KerMaint le nom, l’adresse électronique,
le numéro de téléphone et le numéro de chambre du client, puis la
description. Quand la panne est réparée, KerMaint envoie un courriel au
client. La première maquette conserve les réclamations sans limite de
durée et les affiche à tous les utilisateurs de KerMaint.
Rappel (CEJMA-08) : selon l’article 25 du RGPD, le responsable du
traitement applique la protection des données dès la conception et par
défaut ; par défaut, seules les données nécessaires à chaque finalité
sont traitées, en quantité, en étendue du traitement, en durée de
conservation et en accessibilité.
Qui est responsable du traitement ? Quel est le rôle de Vellacor,
et quelle obligation l’empêche de livrer la maquette telle quelle
?
Pour chacune des quatre dimensions de la protection par défaut,
relève ce qui ne va pas dans la maquette et propose un choix de
conception conforme.
Le courriel « panne réparée » doit-il être envoyé à tous les
clients qui ont réclamé ? Propose le réglage par défaut et
justifie.
Un client demande à Kervanet l’accès à toutes ses données. Écris
le récit utilisateur et deux critères d’acceptation de la fonction que
KerMaint doit offrir pour que Vellacor réponde dans son délai de 5 jours
ouvrés.
Voir le corrigé détaillé
a)Kervanet décide de la finalité
(traiter les réclamations, informer le client) : elle est
responsable du traitement. Vellacor,
qui développe et héberge KerMaint pour son compte, est
sous-traitant. L’article 25 vise le responsable, mais
Vellacor a une obligation de conseil (CEJMA-03) et doit
offrir des garanties suffisantes : livrer une conception manifestement
contraire à la protection par défaut engagerait sa responsabilité
contractuelle (CEJMA-08).
b)
Dimension
Ce qui ne va pas
Choix conforme
Quantité
nom, courriel, téléphone et chambre copiés dans KerMaint
ne stocker que le numéro de réservation (KerResa
connaît le client) et la chambre ; pas de téléphone ; description par
liste de motifs + texte court
Étendue
rien n’empêche de réutiliser les coordonnées (statistiques,
prospection)
finalité unique écrite : suivi de la réclamation et information du
client ; aucune exportation des coordonnées
Durée
conservation sans limite
effacement ou anonymisation de la réclamation à une durée fixée par
Kervanet (par exemple quelques mois après la clôture), purge automatique
livrée avec la fonction
Accessibilité
tous les utilisateurs de KerMaint voient tout
réception et responsable de l’établissement concerné seulement ; les
techniciens voient la chambre et le motif, pas l’identité du client
c) Non. Par défaut, aucun courriel
n’est envoyé : le réceptionniste demande au client s’il souhaite être
informé, et coche la case avec son accord (ou le client le demande dans
l’application). C’est la logique de la protection par
défaut : le traitement supplémentaire (envoyer un courriel)
exige une action, il n’est pas imposé.
d)En tant qu’administrateur fonctionnel de
Kervanet, je veux extraire toutes les données de réclamation liées à un
client afin de répondre à sa demande d’accès dans le délai d’un
mois.
Étant donné un client ayant deux réclamations (une ouverte, une
clôturée), quand l’administrateur lance l’export à partir du numéro de
réservation ou de l’identifiant du client, alors un fichier JSON
contient les deux réclamations avec leurs dates, motifs, statuts et le
choix d’information par courriel, et l’export est journalisé.
Étant donné un utilisateur du profil Technicien, quand il tente de
lancer l’export, alors l’export est refusé.
Piège
Le délai d’un mois est celui de Kervanet envers le
client. Celui de Vellacor (5 jours ouvrés, accord de sous-traitance) est
plus court pour laisser le temps à Kervanet de vérifier et répondre. Une
fonction d’export prévue dès la conception rend ce délai facile à
tenir.
Exercice 8
La chaîne de KerResa
Calcul et analyse
Sarah audite la chaîne de développement de l’API KerResa le
20/10/2026.
Document A — Versions installées sur le serveur de production
de KerResa (relevé du 20/10/2026)
Composant
Version installée
Licence
exemple/planificateur
2.3.0
MIT
exemple/limiteur-debit
3.0.1
Apache-2.0
exemple/client-http
5.2.0
MIT
exemple/journal-psr
3.0.4
MIT
Document B — Avis suivis par la veille
Avis
Composant
Corrigé en
Gravité
Publié le
AVIS-2026-0064
exemple/client-http
5.2.3
élevée
20/08/2026
AVIS-2026-0098
exemple/planificateur
2.3.2
moyenne
14/09/2026
AVIS-2026-0121
exemple/journal-psr
3.0.4
critique
16/10/2026
Document C — Constats sur le projet GitLab de
KerResa
La branche main est protégée, mais les deux
développeurs du projet ont le rôle permettant d’y pousser directement «
pour les correctifs urgents ».
Le pipeline exécute les tests unitaires ; il ne contrôle ni les
dépendances ni les secrets.
Les approbations de merge request sont activées (édition gratuite) ;
4 des 11 merge requests de septembre ont été fusionnées sans
approbation.
Le fichier composer.lock n’est pas versionné : chaque
environnement installe « la dernière version compatible ».
Le fichier .env de recette est présent dans le dépôt
depuis juin 2026.
Pour chaque avis, indique si KerResa est concernée, calcule l’âge
de l’avis au 20/10/2026, la date limite de la politique et l’état (dans
le délai ou dépassé).
Pourquoi l’absence de composer.lock dans le dépôt
est-elle un problème de sécurité, même si les versions installées
aujourd’hui sont correctes ?
Analyse chacun des constats du document C : risque, mesure
proposée, principe ou recommandation appliqué.
Classe tes propositions par priorité et rédige un message de dix
lignes au plus à Anaïs Lecoq.
Voir le corrigé détaillé
a) Âge = 20/10/2026 − date de publication ; limite =
publication + délai de la politique.
Avis
Version installée
Corrigé en
Concerné ?
Âge
Délai
Date limite
État
AVIS-2026-0064
client-http 5.2.0
5.2.3
oui
61 j
30 j
19/09/2026
dépassé de 31 jours
AVIS-2026-0098
planificateur 2.3.0
2.3.2
oui
36 j
90 j
13/12/2026
dans le délai (reste 54 jours)
AVIS-2026-0121
journal-psr 3.0.4
3.0.4
non (déjà corrigé)
4 j
7 j
23/10/2026
—
Le contrôle de Sarah (cours, partie 6) appliqué à ces données donne
:
AVIS-2026-0064 exemple/client-http 5.2.0 À METTRE À JOUR en 5.2.3 (élevée, avis de 61 j, délai 30 j : DÉPASSÉ)
AVIS-2026-0098 exemple/planificateur 2.3.0 À METTRE À JOUR en 2.3.2 (moyenne, avis de 36 j, délai 90 j : reste 54 j)
AVIS-2026-0121 exemple/journal-psr 3.0.4 corrigé (>= 3.0.4)
code retour : 1
b) Sans composer.lock versionné, chaque
installation choisit « la dernière version compatible » au moment où
elle est faite : la recette et la production peuvent avoir des versions
différentes, la production peut recevoir une version
jamais testée (voire une version piégée publiée la
veille), et l’inventaire n’est plus fiable (impossible de savoir quelle
version tourne où). Le fichier de verrouillage garantit que l’on livre
ce qui a été testé et rend la veille possible.
c)
Constat
Risque
Mesure
Principe ou recommandation
Push direct possible sur main
code fusionné sans revue, par erreur ou par un compte volé
retirer le droit de push direct à tous ; les correctifs urgents
passent aussi par une merge request (courte)
branche protégée ; séparation des tâches
Pipeline sans contrôle des dépendances ni des secrets
composants vulnérables livrés, secrets versionnés
ajouter composer audit --locked --no-dev (et le
contrôle des avis de la veille) et le modèle GitLab de détection de
secrets ; bloquer la fusion si un contrôle échoue
intégrité de la chaîne ; ANSSI « Les essentiels — DevSecOps »
4 merge requests sur 11 fusionnées sans approbation
aucune revue sur 36,4 % des modifications
règle d’équipe écrite ; fusion réservée à une ou deux personnes qui
vérifient l’approbation (l’édition gratuite ne bloque pas) ; suivi
mensuel de l’indicateur
revue de code, séparation des tâches
composer.lock absent
versions non maîtrisées (question b)
versionner composer.lock ; installer avec
composer install
versions figées, SBOM
.env de recette dans le dépôt depuis juin
secrets de recette divulgués
changer les secrets de recette immédiatement,
vérifier leur usage, retirer le fichier, ajouter .env au
.gitignore et le crochet pre-commit ; vérifier
qu’aucun secret de production n’est identique
secrets hors du code, un secret par environnement
Calcul de l’indicateur : 4 ÷ 11 = 36,4 % de fusions
sans approbation.
d) Priorités : 1. rotation des secrets du
.env (déjà divulgués) ; 2. mise à jour de
client-http (hors délai) ; 3. versionner
composer.lock et ajouter les contrôles au pipeline ; 4.
supprimer le push direct ; 5. règle et suivi des approbations ; 6. mise
à jour de planificateur avant le 13/12/2026.
Message possible :
Anaïs, audit de la chaîne KerResa du 20/10. Urgent : le fichier
.env de recette est versionné depuis juin ; je propose de
changer aujourd’hui tous les secrets de recette et de vérifier qu’aucun
n’est réutilisé en production. client-http 5.2.0 porte un
avis élevé hors délai depuis le 19/09 : mise à jour en 5.2.3 à tester en
recette cette semaine. Ensuite : versionner composer.lock,
ajouter composer audit et la détection de secrets au
pipeline, retirer le push direct sur main. 4 fusions sur 11
en septembre n’avaient pas d’approbation : je propose que seuls Romain
et toi fusionniez. planificateur est à mettre à jour avant
le 13/12. Détail en pièce jointe. Sarah
Exercice 9
Un mot de passe dans l’historique
Analyse
Le 19/10/2026, en activant la détection de secrets sur tout
l’historique du dépôt de KerMaint, Sarah trouve un fichier
config_test.php contenant un mot de passe de base de
données, ajouté le 12/03/2025 (commit « Environnement de test ») et
retiré le 02/04/2025 (commit « Retrait de la configuration de test »).
Ce mot de passe est celui du compte de la base de l’ancien environnement
de test du pôle développement ; Sarah constate qu’il est
aussi utilisé, à l’identique, par le compte de la base
de recette KV-RECETTE. Le dépôt est cloné sur 6 postes de
développeurs et sauvegardé chaque nuit.
Sur une copie du dépôt, elle obtient :
== fichier présent dans la version actuelle ?
non
== recherche dans tout l'historique
750df3b 2025-04-02 Retrait de la configuration de test
efa0228 2025-03-12 Environnement de test
== contenu retrouvé
-return ['mot_de_passe' => 'Recette-Exemple-2025'];
Explique ce que montre cette sortie, et pourquoi le commit du
02/04/2025 n’a pas supprimé le risque.
Quelle est la première action à mener, et pourquoi avant toute
autre ?
Liste, dans l’ordre, les actions suivantes (vérifications,
corrections, information), en indiquant pour chacune qui la
mène.
Quelles mesures de la chaîne de développement auraient empêché ou
détecté plus tôt ce problème ? Relie chacune à une exigence de l’ASVS
5.0.0 citée dans le cours.
La base de recette contient une copie anonymisée
de KerMaint. Le risque aurait-il été le même si elle avait contenu les
données réelles ? Justifie en une phrase.
Voir le corrigé détaillé
a) Le fichier n’existe plus dans la version actuelle
(« non »), mais la recherche git log -S le retrouve dans
deux commits : celui qui l’a ajouté et celui qui l’a
retiré, et le contenu du mot de passe s’affiche encore. Un commit de
suppression ajoute une nouvelle version sans effacer les anciennes :
toute copie du dépôt (6 postes, sauvegardes, forge) contient le secret
depuis mars 2025. Le risque n’a pas disparu le 02/04/2025 : il a
seulement été caché.
b)Changer le mot de passe du
compte de la base de recette (et de tout compte qui l’utiliserait) :
c’est la seule action qui rend le secret divulgué
inutilisable. Toutes les autres (enquête, nettoyage)
prennent du temps ; pendant ce temps, le secret resterait valable.
c) Ordre proposé :
Rotation du mot de passe de la base de recette par
l’administrateur (Thomas Guéguen, sur demande d’Anaïs), nouveau secret
rangé dans le gestionnaire de secrets ; vérification que l’ancien
environnement de test n’existe plus ou que son mot de passe a aussi
changé.
Recherche de réutilisation : ce mot de passe
sert-il ailleurs, notamment en production ? (Sarah et Thomas) Si oui,
rotation immédiate là aussi.
Vérification des journaux de la base de recette
depuis mars 2025, dans la limite de leur conservation : connexions
inhabituelles avec ce compte (Thomas).
Ticket de sécurité et information d’Anaïs Lecoq ;
si une utilisation frauduleuse touchant des données personnelles
apparaissait, alerte de Kervanet selon l’accord de sous-traitance
(B3-02).
Nettoyage de l’historique, si l’équipe le décide
(réécriture de l’historique et nouvelle copie sur tous les postes) :
utile mais secondaire, puisque le secret est déjà changé.
Prévention : crochet pre-commit sur
les postes, détection de secrets dans le pipeline, analyse unique de
tout l’historique, un secret différent par environnement (Sarah, validé
par Anaïs).
Retour d’expérience : mise à jour de la charte de
développement et du registre des risques de Vellacor (risque « secrets
dans GitLab », B3-01).
d)
Mesure
Effet
Exigence ASVS 5.0.0
Gestionnaire de secrets, aucun secret dans le code
le mot de passe n’aurait jamais été écrit dans le fichier
v5.0.0-13.3.1 (L2)
Crochet pre-commit et détection de secrets dans le
pipeline
le commit du 12/03/2025 aurait été refusé ou signalé
v5.0.0-13.3.1 (L2), à l’appui de l’exigence EXS-05
Un secret différent par environnement, accès aux secrets limité
la fuite du secret de test n’aurait pas ouvert la recette
v5.0.0-13.3.2 (L2 : accès aux secrets selon le moindre
privilège)
Aucun dossier .git exposé en production
évite qu’un historique de ce type soit téléchargeable depuis le
serveur web
v5.0.0-13.4.1 (L1)
e) Non : avec des données réelles,
la fuite d’un accès à la base aurait pu permettre une violation de
données personnelles, à évaluer avec le DPO de Kervanet et peut-être à
notifier ; l’anonymisation de la recette (et l’absence de données
réelles hors production) réduit fortement la gravité.
Piège
« Le dépôt est privé, donc le secret n’est pas divulgué. » Un dépôt
privé est copié sur tous les postes des développeurs, présents et
passés, dans les sauvegardes et parfois chez un prestataire. Un secret
qui y est entré doit être considéré comme connu de toutes ces personnes
et de tous ces lieux.
Exercice 10
Entraînement E7 : signaler une panne depuis « Kervanet
Contexte. Tu es Sarah Cherif, alternante en BTS SIO
option SLAM chez Vellacor Services Numériques, prestataire de Kervanet
Hôtels & Résidences. Kervanet envisage pour 2027 (projet non décidé)
une fonction de l’application mobile « Kervanet & Moi » : un client
en séjour signale une panne dans sa chambre (chauffage, eau,
climatisation…) ; l’API KerResa transmet le signalement à KerMaint, qui
crée une intervention. Anaïs Lecoq te demande de préparer le volet
sécurité du dossier de conception avant le chiffrage.
ADossier documentaire
Document 1 — Le projet
Utilisateurs : clients en séjour (application mobile, connectés à
leur compte « Kervanet & Moi ») ; réceptionnistes et techniciens
(KerMaint).
Données saisies par le client : catégorie de la panne, description
libre (300 caractères au plus), photo facultative (non retenue dans la
première version).
L’application mobile appelle l’API KerResa
(https://api.kervanet-hotels.example/), exposée sur
Internet ; KerResa connaît le séjour en cours du client (établissement,
chambre) ; KerResa appelle KerMaint, interne, à travers le VPN du
siège.
Règle de gestion proposée par Franck Guillou : priorité 2 pour le
chauffage et l’eau, 3 pour la climatisation et l’électricité, 4 pour la
télévision, le Wi-Fi et le reste.
Volume attendu : quelques dizaines de signalements par jour en haute
saison.
Document 2 — Récits utilisateur du premier
atelier
N°
Récit
R1
En tant que client en séjour, je veux signaler une panne de ma
chambre depuis l’application afin de ne pas devoir appeler la
réception.
R2
En tant que réceptionniste, je veux voir les signalements de mon
établissement afin de prévenir le client du passage du technicien.
R3
En tant que client, je veux être informé quand la panne est
réparée.
Document 3 — Prototype de démonstration (extrait PHP, côté
KerResa)
// signalement.php (prototype, à ne pas reproduire)constJETON_KERMAINT='jeton-de-demo';// jeton d'appel de KerMaint$d=json_decode(file_get_contents('php://input'),true);error_log('signalement reçu de '.$client['email'] .' : '.json_encode($d));try {$inter= ['chambre' => $d['chambre'],'categorie' => $d['categorie'],'priorite' => $d['priorite'] ??3,'description' => $d['description']]; envoyerAKerMaint($inter,JETON_KERMAINT);echojson_encode(['statut' => 'ok']);} catch (Throwable$e) {http_response_code(500);echojson_encode(['erreur' => $e->getMessage()]);}
Document 4 — Composants envisagés pour la
fonction
Composant
Version
Remarque de la veille au 20/10/2026
exemple/client-http
5.2.0
AVIS-2026-0064, gravité élevée, publié le 20/08/2026, corrigé en
5.2.3
exemple/redim-image
0.9.2
dernier dépôt de code en 2022, aucune réponse aux signalements
Document 5 — Échelles et règles de Vellacor
Gravité 1 à 4, vraisemblance 1 à 4, criticité = G × V ; zones : 1 à 3
faible, 4 et 6 modéré, 8 et 9 élevé, 12 et 16 critique. Charte de
développement : niveau ASVS L1 pour toute application, L2 pour toute
application exposée sur Internet ou traitant des données de clients.
Politique de délais des composants : 7, 30, 90, 180 jours selon la
gravité (critique, élevée, moyenne, faible).
Document 6 — Cadre juridique (résumé)
RGPD, art. 25 : le responsable du traitement met en œuvre la
protection des données dès la conception et par défaut (seules les
données nécessaires, en quantité, étendue, durée et accessibilité). Art.
32 : le responsable et le sous-traitant prennent des mesures de sécurité
adaptées au risque. Kervanet est responsable du traitement, Vellacor
sous-traitant.
Règlement (UE) 2024/2847 (cyberrésilience) : pour les produits
comportant des éléments numériques mis sur le marché de l’Union,
conception adaptée aux risques, aucune vulnérabilité exploitable connue
à la mise sur le marché, configuration sécurisée par défaut ; applicable
à partir du 11/12/2027.
BTravail à faire
Mission 1 — Les exigences (4 points)
1.1 Indique le niveau de l’ASVS à viser pour la fonction et
justifie-le avec le dossier.
1.2 Rédige quatre exigences de sécurité vérifiables pour la fonction
(identifiant, formulation, vérification), dont une sur la priorité et
une sur la chambre concernée.
1.3 Ajoute au récit R1 un critère d’acceptation négatif.
Mission 2 — La modélisation des menaces (5
points)
2.1 Décris le diagramme de flux de données de la fonction et place
les frontières de confiance.
2.2 Six menaces sont présélectionnées : M1 « le client impose la
priorité 1 » (G 2, V 4) ; M2 « le client signale une panne pour une
autre chambre » (G 2, V 3) ; M3 « un robot envoie des milliers de faux
signalements » (G 2, V 3) ; M4 « le jeton d’appel de KerMaint est lu
dans le code » (G 3, V 3) ; M5 « une erreur renvoie au client un message
technique » (G 2, V 3) ; M6 « l’adresse électronique des clients est
copiée dans les journaux » (G 2, V 4). Donne la famille STRIDE de
chacune, calcule sa criticité, sa zone, et classe-les.
Mission 3 — La revue du prototype (5 points)
3.1 Relève dans le document 3 les défauts de sécurité, en citant la
ligne et le principe non respecté.
3.2 Écris une version corrigée de la fonction de traitement du
signalement et décris les essais qui en prouvent le bon
fonctionnement.
Mission 4 — La chaîne de développement (3
points)
4.1 Analyse les deux composants du document 4 et indique ta décision
pour chacun.
4.2 Cite deux contrôles à ajouter au pipeline GitLab de KerResa pour
ce projet.
Mission 5 — Protection des données et note à la direction (3
points)
5.1 Pour le récit R3, propose un réglage par défaut conforme à
l’article 25 et justifie-le.
5.2 Rédige une note de huit à dix lignes à Gwenaëlle Le Bihan
expliquant pourquoi ces exigences de sécurité doivent être chiffrées dès
maintenant, et ce que coûterait de les ajouter après la mise en
service.
Voir le corrigé détaillé
Mission 1 — Les exigences
1.1 Niveau L2 de l’ASVS : la
fonction est exposée sur Internet (API KerResa, document 1) et traite
des données de clients (séjour, chambre, description) ; c’est la règle
de la charte de Vellacor (document 5).
1.2 Exigences possibles :
Id
Exigence
Vérification
EXS-P1
La priorité de l’intervention est calculée par le
serveur selon la règle de gestion (document 1) ; toute priorité envoyée
par l’application est refusée.
requête contenant un champ priorite : refus ; contrôle
de la priorité calculée pour chaque catégorie
EXS-P2
L’établissement et la chambre sont
déterminés par le serveur à partir du séjour en cours du client
authentifié ; aucune chambre transmise par l’application n’est
acceptée.
requête avec un champ chambre : refus ; signalement
d’un client sans séjour en cours : refus
EXS-P3
Les champs reçus sont validés par liste blanche : catégorie de la
liste fermée, description normalisée de 5 à 300 caractères ; tout autre
champ fait rejeter la requête.
jeu d’essai de valeurs invalides
EXS-P4
Le nombre de signalements est limité par client (par exemple 5 par
séjour et par jour) ; au-delà, refus et alerte.
envoi répété en recette
EXS-P5
En cas d’erreur, l’API renvoie un code et un message génériques avec
une référence ; le détail est journalisé.
erreur provoquée en recette
EXS-P6
Le jeton d’appel de KerMaint est fourni par le gestionnaire de
secrets, différent en recette et en production ; il n’apparaît ni dans
le code ni dans les journaux.
revue du code, détection de secrets, lecture des journaux
1.3 Étant donné un client connecté dont le séjour en
cours est la chambre 214 du Phare de Royan, quand l’application envoie
un signalement contenant la chambre 101, alors le signalement est refusé
et aucune intervention n’est créée.
Mission 2 — La modélisation des menaces
2.1 Entités externes : client (application mobile),
réceptionniste et technicien (KerMaint). Traitements : API KerResa
(exposée sur Internet) ; KerMaint (interne). Stockages : base de KerResa
(séjours), base de KerMaint (interventions), journaux. Flux :
application → KerResa (signalement) ; KerResa → base KerResa (séjour en
cours) ; KerResa → KerMaint (création de l’intervention, avec jeton) ;
KerMaint → réceptionniste et technicien ; KerMaint → client (information
de réparation, si accepté). Frontières de confiance :
Internet / API KerResa (la plus exposée) ; KerResa / KerMaint (passage
dans le réseau interne par le VPN) ; applications / bases.
2.2 Criticité = G × V.
Rang
Menace
STRIDE
G
V
Criticité
Zone
1
M4 jeton d’appel de KerMaint lisible dans le code
I (divulgation), qui permet ensuite S (usurpation de KerResa)
3
3
9
élevé
2
M1 priorité imposée par le client
T (falsification)
2
4
8
élevé
3
M6 adresse électronique des clients copiée dans les journaux
I (divulgation)
2
4
8
élevé
4
M2 signalement pour une autre chambre
T (falsification), voire S
2
3
6
modéré
5
M3 milliers de faux signalements
D (déni de service)
2
3
6
modéré
6
M5 message technique renvoyé au client
I (divulgation)
2
3
6
modéré
M4 est classé premier (criticité 9). M1 et M6 ont la même criticité
et la même gravité : l’ordre entre eux se discute (M1 désorganise le
service, M6 crée une copie de données personnelles).
adresse du client et contenu complet copiés dans le journal
(M6)
minimisation, journal sans donnée inutile
'chambre' => $d['chambre']
chambre fournie par le client (M2)
ne jamais faire confiance au client pour une donnée que le serveur
connaît
'priorite' => $d['priorite'] ?? 3
priorité fournie par le client (M1) ; valeur par défaut
arbitraire
règle de gestion appliquée par le serveur ; sécurité par défaut
echo json_encode(['erreur' => $e->getMessage()])
message technique renvoyé (M5)
erreurs génériques, détail au journal
aucune limite
volume non contrôlé (M3)
limitation (EXS-P4), à traiter avec B3SLAM-03
3.2 Version corrigée :
<?phpdeclare(strict_types=1);constCATEGORIES= ['chauffage' => 2,'eau' => 2,'climatisation' => 3,'electricite' => 3,'tv_wifi' => 4,'autre' => 4];// catégorie => prioritéconstCHAMPS= ['categorie','description'];function traiterSignalement(string$corps,array$sejour):array{try {$donnees=json_decode($corps,true,4,JSON_THROW_ON_ERROR);if (!is_array($donnees) ||array_diff(array_keys($donnees),CHAMPS) !== []) {return [400, ['erreur' => 'requete_invalide']]; }$categorie=$donnees['categorie'] ??null;if (!is_string($categorie) ||!array_key_exists($categorie,CATEGORIES)) {return [422, ['erreur' => 'categorie_inconnue']]; }$texte=trim(Normalizer::normalize((string) ($donnees['description'] ??''),Normalizer::FORM_C));if (mb_strlen($texte) <5||mb_strlen($texte) >300) {return [422, ['erreur' => 'description_5_a_300_caracteres']]; }// La chambre et l'établissement viennent du séjour en cours (serveur), jamais du client ;// la priorité est calculée par le serveur selon la règle de gestion.$signalement= ['site' => $sejour['site'],'chambre' => $sejour['chambre'],'categorie' => $categorie,'priorite' => CATEGORIES[$categorie],'description' => $texte];error_log(sprintf('signalement site=%s chambre=%s categorie=%s',$sejour['site'],$sejour['chambre'],$categorie));return [201, ['statut' => 'enregistre','priorite' => $signalement['priorite']]]; } catch (JsonException$e) {return [400, ['erreur' => 'requete_invalide']]; } catch (Throwable$e) {$ref=bin2hex(random_bytes(4));error_log("ref=$ref ".get_class($e));// détail au journal, pas au clientreturn [500, ['erreur' => 'erreur_interne','reference' => $ref]]; }}
$sejour est fourni par KerResa à partir du client
authentifié (B3SLAM-03) ; l’envoi à KerMaint (non montré) utilise le
jeton lu par la fonction secret() du cours. Essais avec le
séjour « Phare de Royan, chambre 214 » :
Essai
Corps envoyé
Réponse
normal
catégorie chauffage, description « Radiateur froid
depuis ce matin »
Un essai positif, quatre essais négatifs, et le journal ne contient
ni adresse électronique ni description.
Mission 4 — La chaîne de développement
4.1client-http 5.2.0 : avis de gravité
élevée publié le 20/08/2026, délai de 30 jours, limite le 19/09/2026,
dépassée de 31 jours au 20/10/2026 → ne l’utiliser
qu’en version 5.2.3 ou plus (et corriger KerResa, qui
l’utilise déjà, exercice 8). redim-image 0.9.2 : composant
abandonné (aucune activité depuis 2022, aucune réponse
aux signalements) → refuser : une faille découverte
demain ne serait jamais corrigée ; la photo n’est pas dans la première
version, on choisira un composant maintenu le moment venu.
4.2 Ajouter au pipeline :
composer audit --locked --no-dev (avec le contrôle des avis
de la veille et blocage si un délai est dépassé), et le modèle GitLab de
détection de secrets ; on peut ajouter les tests
automatiques des refus (priorité, chambre, catégorie).
Mission 5 — Protection des données et note
5.1 Récit R3 : par défaut, pas de
notification. L’application propose au client, au moment du signalement,
une case « Me prévenir quand c’est réparé » non cochée
; la notification passe par l’application (notification dans « Kervanet
& Moi ») plutôt que par un courriel qui recopierait le détail ; elle
ne contient que « Votre demande du … est traitée ». C’est la protection
par défaut de l’article 25 (document 6) : un traitement
supplémentaire n’a lieu que si la personne agit.
5.2 Note possible :
Madame Le Bihan, la fonction « signaler une panne » sera la première
qui permette à des clients d’agir sur KerMaint depuis Internet. Notre
analyse fait apparaître trois risques élevés : un secret technique
exposé dans l’application, des priorités faussées par l’utilisateur, des
adresses de clients copiées dans les journaux. Les exigences que nous
proposons (contrôles côté serveur, gestion des secrets, journaux
limités, composants à jour) représentent quelques jours de travail si
elles sont prévues dès la conception. Ajoutées après la mise en service,
elles demanderaient de modifier une application déjà utilisée, de
refaire la recette et, en cas d’incident, de gérer une violation de
données avec votre DPO. Le RGPD (art. 25) impose d’ailleurs à Kervanet,
responsable du traitement, de protéger les données dès la conception.
Nous vous proposons donc de les inclure dans le devis. Sarah Cherif,
pour Anaïs Lecoq.
Astuce
Dans une note à la direction, parle de risques, de
coûts et de décisions, pas de
fonctions PHP. Une phrase sur le cadre juridique, tiré du dossier,
renforce l’argument sans le transformer en cours de droit.
Ce site n’utilise que les cookies nécessaires à son fonctionnement —
votre session et vos préférences d’affichage. Aucun traceur
publicitaire, aucune mesure d’audience tierce.En savoir plus