BTS SIO 2023 SLAM – Lama Zoo
Analyse détaillée et méthodologie complète

Habilitations SQL, triggers, XSS, CSRF, vues SQL, accès site public et pseudonymisation RGPD.

SLAMSession 2023SQLSécurité applicativeRGPD

Le sujet Lama Zoo est un cas très représentatif de l’épreuve SLAM : il oblige à relier le développement applicatif, la base de données, la sécurité web et le RGPD. Pour réussir, il faut éviter les réponses vagues et montrer, à chaque fois, quel risque est corrigé par la solution technique proposée.

Plan de l’analyse

1. Analyse du cas Lama Zoo : comprendre les enjeux du sujet

Lama Zoo est un parc animalier qui dispose d’un système applicatif de parrainage et de gestion interne. Le sujet met en évidence plusieurs fragilités : un contrôle d’accès insuffisant, des habilitations à revoir, des affichages vulnérables aux attaques XSS, des formulaires à protéger contre les attaques CSRF, et une exposition excessive de certaines données au site public.

La grille d’analyse en 4 dimensions

  • Métier : gérer les animaux, les parrainages, les employés et les accès selon les rôles.
  • Application : afficher des avis, traiter des formulaires, gérer des droits applicatifs et des données publiques.
  • Sécurité : éviter la force brute, la XSS, la CSRF, les droits excessifs et les erreurs de triggers.
  • RGPD : limiter les données affichées publiquement et pseudonymiser les parrains dans le tableau d’honneur.

Le vrai fil conducteur du sujet

Le sujet ne demande pas seulement de réciter des définitions de sécurité. Il faut montrer que vous savez appliquer ces notions à un contexte précis : un parc animalier, un site de parrainage, des utilisateurs avec des rôles différents et des données qui ne doivent pas toutes être rendues publiques.

Ce que le correcteur veut voir

Une copie solide explique toujours le lien entre la faille et la correction. Dire “il faut utiliser esc()” est utile, mais insuffisant. Il faut ajouter que cette fonction empêche le navigateur d’interpréter une saisie utilisateur comme du code JavaScript exécutable.

Les blocs techniques du sujet

BlocCompétence attendueErreur à éviter
HabilitationsMettre en place des droits par rôle et limiter les privilègesConfondre authentification Windows et authentification applicative
Triggers SQLAutomatiser une règle ou une trace en baseUtiliser NEW dans un DELETE ou OLD dans un INSERT
XSSÉchapper les données affichéesAfficher directement une variable utilisateur
CSRFVérifier un jeton côté serveurCroire que l’utilisateur authentifié suffit
Vue SQL / RGPDLimiter les colonnes et pseudonymiserExposer la table complète au site public

2. Méthodologies : comment structurer les réponses

Méthode pour une question d’habilitation

  1. Identifier les profils d’utilisateurs : réception, coordination, administration, site public.
  2. Déterminer les actions réellement nécessaires : consulter, ajouter, modifier, supprimer.
  3. Attribuer les droits minimaux : SELECT, INSERT, UPDATE, DELETE.
  4. Justifier avec le principe du moindre privilège.

La bonne réponse ne consiste pas à donner “tous les droits” pour que cela fonctionne. Le correcteur attend une logique de réduction du risque : chaque rôle doit obtenir uniquement ce dont il a besoin.

Méthode pour une question de trigger SQL

  1. Repérer le type du trigger : INSERT, UPDATE ou DELETE.
  2. Choisir correctement NEW ou OLD.
  3. Écrire une action simple et traçable : insertion dans un historique, contrôle de règle, journalisation.
  4. Terminer chaque instruction SQL par un point-virgule.

Dans un AFTER DELETE, la ligne supprimée n’existe plus dans NEW : il faut donc utiliser OLD. Dans un AFTER INSERT, il n’existe pas d’ancienne valeur : il faut utiliser NEW.

Méthode pour corriger une faille XSS

Une faille XSS apparaît lorsqu’une donnée saisie par un utilisateur est réaffichée sans protection. Dans CodeIgniter, la réponse attendue est d’utiliser la fonction esc() dans la vue.

<?= esc($avis['nomAnimal']) ?>
<?= esc($avis['emailVisiteur']) ?>
<?= esc($avis['commentaire']) ?>

Cette correction transforme les caractères dangereux en entités HTML. Le navigateur affiche alors le texte au lieu d’exécuter un script.

Méthode pour une question CSRF

Le raisonnement attendu est le suivant : une requête envoyée par le navigateur d’un utilisateur authentifié n’est pas forcément volontaire. Il faut donc ajouter un jeton CSRF dans le formulaire et vérifier ce jeton côté serveur avant de traiter l’action.

Niveau de difficulté : technique mais très prévisible

Lama Zoo est exigeant car il mélange SQL, framework web, sécurité et RGPD. Toutefois, les notions sont très classiques : droits minimaux, échappement HTML, jeton CSRF, vue SQL et pseudonymisation. Avec une méthode claire, le sujet devient très rentable.

3. Exemples modèles 📗 : ce qu’une excellente réponse peut donner

Exemple modèle 1 : expliquer la force brute

“Une attaque par force brute consiste à tester automatiquement de nombreuses combinaisons de mots de passe jusqu’à trouver la bonne. Le risque est renforcé si le mot de passe est court, prévisible ou noté à proximité du poste. Une politique robuste impose donc une longueur suffisante, de la complexité et une sensibilisation des utilisateurs.”

Exemple modèle 2 : justifier les rôles applicatifs

“Les rôles applicatifs permettent de limiter les droits selon les missions réelles de l’utilisateur. Un réceptionniste peut consulter certaines données sans pouvoir supprimer des informations sensibles. Cette séparation réduit les conséquences d’une erreur ou d’un compte compromis.”

Exemple modèle 3 : corriger une XSS

“Les données saisies par un visiteur doivent être échappées avant affichage avec esc(). Ainsi, si un utilisateur saisit une balise <script>, elle sera affichée comme du texte et non exécutée par le navigateur.”

Exemple modèle 4 : protéger contre la CSRF

“Le formulaire doit contenir un jeton CSRF unique associé à la session. Lors de la soumission, le serveur compare le jeton reçu avec le jeton attendu. Si le jeton est absent ou invalide, la requête est refusée.”

Exemple modèle 5 : limiter l’accès du site public

“L’utilisateur site_public ne doit pas accéder directement à la table complète des animaux. Il faut créer une vue SQL ne contenant que les colonnes destinées à l’affichage public, puis accorder uniquement un droit SELECT sur cette vue.”

4. Pièges à éviter ⚠️ : les erreurs qui coûtent des points

Piège 1 : utiliser NEW et OLD au hasard

Dans un trigger DELETE, utilisez OLD. Dans un trigger INSERT, utilisez NEW. Dans un UPDATE, les deux existent, mais ils n’ont pas le même sens. Cette erreur peut faire perdre tous les points d’une question de code SQL.

Piège 2 : remplacer esc() par une réponse générique

Le sujet s’inscrit dans CodeIgniter. La réponse attendue est donc la fonction esc(), pas seulement “sécuriser l’affichage” ou “vérifier les données”.

Piège 3 : croire que l’authentification suffit contre la CSRF

La CSRF exploite justement le fait que l’utilisateur est déjà authentifié. Le serveur doit donc exiger un jeton spécifique, impossible à deviner depuis un site externe.

Piège 4 : donner un accès direct à la table complète

Le site public n’a pas besoin de toutes les colonnes de la table Animal. Accorder un droit direct sur la table complète expose des données inutiles et sensibles.

Piège 5 : afficher trop de données personnelles

Le tableau d’honneur ne doit pas afficher nom complet, adresse et téléphone. Une pseudonymisation par initiales et ville suffit à conserver l’objectif d’affichage sans exposer inutilement les personnes.

Stratégie pour viser 15/20 ou plus

Plan d’attaque pendant l’épreuve

  1. Lire le contexte : parc animalier, employés, site public, parrainages.
  2. Repérer les données sensibles : comptes, avis, parrains, animaux, informations internes.
  3. Associer chaque faille à une menace : XSS, CSRF, force brute, droits excessifs.
  4. Donner une correction technique précise : esc(), token CSRF, vue SQL, droits limités.
  5. Justifier en une phrase : ce que la correction empêche concrètement.

La copie qui dépasse 15/20

Une très bonne copie emploie un vocabulaire précis : moindre privilège, échappement HTML, jeton CSRF, vue SQL, pseudonymisation, traçabilité. Elle explique pourquoi chaque correction est adaptée au cas Lama Zoo, au lieu de réciter des solutions générales.

FAQ – Sujet Lama Zoo BTS SIO 2023 SLAM

Quel est le thème principal du sujet Lama Zoo ?

Le sujet porte sur la sécurité applicative : habilitations, triggers SQL, XSS, CSRF, vues SQL et pseudonymisation RGPD.

Pourquoi faut-il utiliser esc() dans CodeIgniter ?

La fonction esc() échappe les caractères HTML dangereux et empêche l’exécution d’un script injecté par un utilisateur.

Quelle est la différence entre OLD et NEW dans un trigger ?

OLD désigne les anciennes valeurs, NEW désigne les nouvelles. Dans un DELETE, on utilise OLD ; dans un INSERT, on utilise NEW.

Comment limiter les données visibles sur le site public ?

Il faut créer une vue SQL qui ne contient que les colonnes nécessaires à l’affichage public, puis accorder un droit SELECT à l’utilisateur site_public.

Pourquoi pseudonymiser le tableau d’honneur ?

La pseudonymisation réduit l’exposition des données personnelles tout en permettant de conserver un affichage public lisible, par exemple avec des initiales et la ville.

📥 Télécharger le document officiel

Sujet complet BTS SIO 2023 SLAM Lama Zoo pour travailler l’épreuve.

📄 Sujet complet PDF

📚 Autres sujets SIO

Retrouvez les autres sujets BTS SIO disponibles pour compléter vos révisions.