Aller au contenu

Condensé : Sécurité Informatique pour le Titre CDA

Compétences à valider pour la conception et le développement d’applications sécurisées


Table des Matières



1. Sécuriser une Interface Utilisateur

Objectifs

Bonnes Pratiques

    // Validation d'un champ de formulaire
    function validateInput(input) {
      const regex = /^[a-zA-Z0-9\s]+$/; // on autorise les lettres, chiffres et espaces avec un regex
      return regex.test(input);
    }
    @PostMapping("/submit")
    public String submitForm(@Valid @ModelAttribute("user") User user, BindingResult result) {
        if (result.hasErrors()) {
            return "error";
        }
        return "success";
    }

Exemple de Faille XSS

<!-- vulnérable : Injection directe de code HTML/JS sans échappement, le code est récupéré tel quel donc du script js sera interprété ! -->
<div>{{ userInput }}</div>

<!-- Sécurisé : Échappement automatique avec Thymeleaf (Java) -->
<div th:text="${userInput}"></div>

2. Sécurité Applicative Côté Serveur

Objectifs

Bonnes Pratiques

# ------------------------------------------------------------
# Méthodes HTTP autorisées ici, seulement les Get, Post et Head
# le reste est interdit. par contre, ici c'est pour toutes les
# pages du site. nous sommes dans le fichier .htaccess
# ------------------------------------------------------------
<LimitExcept GET POST HEAD>
    Require all denied
</LimitExcept>

Un WAF peut aider, mais il ne résout pas toute la sécurité ! Il agit comme un filtre devant pour l’application : il inspecte les requêtes HTTP et bloque des attaques connues, par exemple injection SQL, XSS, scans agressifs, tentatives d’exploitation, robots suspects. L’OWASP décrit un WAF comme une protection placée devant une application web, appliquant des règles sur les conversations HTTP, notamment contre XSS et SQL injection.


3. Recommandations du Guide ANSSI

Vous pouvez parourir la documentation des recommandations qui ne sont pas toujours appliquées par certains sites comme celui de l’ANTS !

Principes Clés

  1. Authentification forte : Utiliser MFA (Multi-Factor Authentication) que vous avez l’habitude d’utiliser sur pas mal de sites.
  2. Chiffrement des données : TLS 1.3 pour les communications, AES-256 pour le stockage.
  3. Gestion des logs : Centraliser et surveiller les logs avec des outils comme ELK Stack ou Splunk.
  4. Mises à jour régulières : Correctifs de sécurité pour les dépendances (ex : npm audit, OWASP Dependency-Check).

Ressource


4. Parades contre les Failles XSS et CSRF

XSS (Cross-Site Scripting)

    Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted.cdn.com;

Lien vers un complément d’explication sur la manière de résoudre les alertes CSP

    // exemple en Java (Servlet)
    Cookie cookie = new Cookie("sessionId", "12345");
    cookie.setHttpOnly(true);
    cookie.setSecure(true); // HTTPS uniquement
    response.addCookie(cookie);

CSRF (Cross-Site Request Forgery)


5. Mise en Place d’un Certificat Numérique

Étapes

  1. Générer une clé privée et un CSR :
    openssl req -newkey rsa:2048 -nodes -keyout server.key -out server.csr
    
  2. Soumettre le CSR à une autorité de certification (CA) (exemple : Let’s Encrypt, gratuit pour des hébergements ovh).
  3. Installer votre certificat sur le serveur web (Apache, Nginx) :
    # Exemple pour Apache
    SSLCertificateFile /path/to/certificate.crt
    SSLCertificateKeyFile /path/to/server.key
    
  4. Forcer HTTPS dans votre fichier .htaccess :

    # Redirection HTTP → HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    


6. Design Patterns de Sécurité

Ces patterns sont générales étudiés lors de l’apprentissage de la programmation et sont pour la pluplart utilisés par les frameworks. pour plus d’information, cherchez sur ce site les design pattern utilisés en Java

Patterns à Connaître

Pattern Description Exemple d’Utilisation
Proxy Contrôle l’accès à un objet (vérification des droits). Filtrage des requêtes HTTP.
Decorator Ajoute dynamiquement des responsabilités (chiffrement). Chiffrement des données avant stockage.
Factory Method Crée des objets sans spécifier la classe exacte (gestion des algorithmes de chiffrement). CipherFactory.getCipher("AES")
Observer Notifie des objets en cas de changement (surveillance des logs). Système de monitoring en temps réel.
Strategy Encapsule des algorithmes interchangeables (stratégies d’authentification). AuthStrategy.authenticate(user, password)

Exemple en Java : Pattern Proxy

// Interface pour l'objet réel
public interface UserService {
    void saveUser(User user);
}

// Objet réel
public class UserServiceImpl implements UserService {
    @Override
    public void saveUser(User user) {
        System.out.println("Sauvegarde de l'utilisateur : " + user.getName());
    }
}

// Proxy pour ajouter une couche de sécurité
public class UserServiceProxy implements UserService {
    private UserService realService;
    private SecurityChecker securityChecker;

    public UserServiceProxy(UserService realService, SecurityChecker securityChecker) {
        this.realService = realService;
        this.securityChecker = securityChecker;
    }

    @Override
    public void saveUser(User user) {
        if (securityChecker.hasPermission(user, "WRITE")) {
            realService.saveUser(user);
        } else {
            throw new SecurityException("Accès refusé !");
        }
    }
}


7. Le DICP (Dossier d’Identité et de Configuration des Postes)

Définition

Je ne suis pas certain que c’est ce DICP que vous devez connaître pour les compétences CDA, mais je le mets quand même, c’est plutôt pout les BTS SIO/SLAM. je pense que vous êtes plutôt concerné par la version (Disponibilité - Intégrité - Confidentialité - preuve). J’en parle dans le document principal sur la Cybersécurité. Ce DICP c’est plutôt un rôle différent au sein de l’entreprise.

Document qui recense :

Exemple de Contenu

| **Poste**       | **IP**       | **OS**          | **Utilisateur** | **Rôle**          | **Dernière MAJ** |
|-----------------|--------------|-----------------|-----------------|-------------------|------------------|
| PC-DEV-01       | 192.168.1.10 | Ubuntu 22.04    | Alicia           | Développeuse      | 2026-05-01       |
| SRV-PROD-01     | 192.168.1.20 | Debian 11       | root            | Administrateur   | 2026-05-15       |

Utilité


Les 3 piliers de la sécurité : CIA (du DICP qui vous concerne)

Confidentialité (Confidentiality)

Intégrité (Integrity)

Disponibilité (Availability)


8. Contraintes d’Accès pour une Base de Données

Bonnes Pratiques

  1. Principle of Least Privilege : Donner uniquement les droits nécessaires pas plus.
    -- Créer un utilisateur avec des droits limités
    CREATE USER app_user WITH PASSWORD 'secure_password';
    GRANT SELECT, INSERT ON TABLE users TO app_user;
    
  2. Chiffrement des données sensibles :
    • Utiliser TDE (Transparent Data Encryption) ou chiffrement applicatif.
  3. Audit des accès :
    -- activer l'audit dans PostgreSQL
    ALTER SYSTEM SET log_statement = 'all';
    
  4. Isolation des environnements :
    • Base de données dédiée pour la production, le test, le développement. Pour Spring Boot, des les fichier application-dev.yml ou application-prod.yml


9. Gestion des Comptes et des Mots de Passe

Bonnes Pratiques



10. Modes d’Authentification

Types d’Authentification

Mode Description Exemple
Authentification simple Mot de passe seul. Formulaire de login classique.
MFA (Multi-Factor Authentication) Combinaison de 2+ facteurs (ex : mot de passe + SMS/OTP). Google Authenticator, YubiKey.
Authentification par certificat Utilisation d’un certificat numérique (ex : X.509). Connexion VPN avec certificat client.
OAuth 2.0 / OpenID Connect Délégation d’authentification à un tiers (ex : Google, Facebook). “Se connecter avec Google”.
Biométrie Empreinte digitale, reconnaissance faciale. Déverrouillage d’un smartphone.

Exemple : OAuth 2.0 avec Spring Security

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/login").permitAll()
                .anyRequest().authenticated()
            .and()
            .oauth2Login();
    }
}


11. Veille sur la Sécurité pour Applications Web et Mobile

Outils et Méthodes

  1. Sources d’information :
  2. Outils de scan :
    • OWASP ZAP (pour les tests d’intrusion).
    • Snyk (pour les dépendances vulnérables).
    • Dependabot (GitHub) pour les mises à jour automatiques.
  3. Alertes automatiques :
    • Configurer des webhooks pour recevoir des notifications (ex : Slack, email).

Exemple : Utilisation de Dependabot

# Fichier .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "maven"
    directory: "/"
    schedule:
      interval: "daily"
    open-pull-requests-limit: 10


12. Injections SQL : Comprendre et Éviter

Qu’est-ce qu’une Injection SQL ?

Solutions

  1. Prepared Statements (comme vu précédemment).
  2. ORM (Object-Relational Mapping) :
    • Utiliser Hibernate, JPA, ou SQLAlchemy (Python).
      // avec JPA (Spring Data)
      @Repository
      public interface UserRepository extends JpaRepository<User, Long> {
        User findByUsernameAndPassword(String username, String password);
      }
      
  3. Validation des entrées :
    • Utiliser des expressions régulières pour valider les champs.
      // Valider un nom d'utilisateur (lettres et chiffres uniquement)
      if (!userInput.matches("^[a-zA-Z0-9]+$")) {
        throw new IllegalArgumentException("Nom d'utilisateur invalide !");
      }
      


13. Le Fuzzing

Définition

Exemple avec AFL

# Compiler le programme avec AFL
afl-gcc programme.c -o programme_afl

# Lancer le fuzzing
afl-fuzz -i inputs/ -o outputs/ ./programme_afl

Cas d’Usage



14. ISTL et ISTOB : Apports pour la Sécurité

Définitions

Terme Signification Apports pour la Sécurité
ISTL Information System Threat Landscape (Paysage des Menaces des Systèmes d’Information) Analyse des menaces spécifiques à un secteur (ex : santé, finance).
ISTOB Information System Threat Observation Bulletin (Bulletin d’Observation des Menaces) Alertes en temps réel sur les nouvelles vulnérabilités ou attaques (ex : CVE critiques).

Utilité

Sources



Conclusion

Ce complément couvre les compétences essentielles en sécurité informatique pour le titre CDA. Pour aller plus loin :


Ressources Utiles


Il se peut que certains liens deviennent obsolètes, mais pas les principes de sécurité…

Un lien vers le paramètrage pour réduire les alertes CSP d’Owasp ZAP lors de l’analyse d’un site web ou du votre.