OWASP Top 10 côté dev, hardening WordPress/Odoo/Zoho, RGPD pratique, déclaration CNIL 72h, transferts internationaux.
L'OWASP Top 10 est la liste de référence des risques applicatifs web les plus critiques. Mise à jour tous les 3-4 ans.
Un user peut accéder à des données/actions qu'il ne devrait pas. Ex: /admin/users/42 accessible sans rôle admin, ou /api/orders/123 renvoie la commande même si elle appartient à un autre user.
Mitigation : middleware d'auth/authz systématique côté serveur — JAMAIS faire confiance à l'absence du bouton côté front. Vérifier que l'user a le droit pour CHAQUE endpoint.
Données sensibles transmises ou stockées sans chiffrement / avec algos faibles. Ex: passwords stockés en clair, MD5, SHA1.
Mitigation : HTTPS obligatoire partout (cf module 2), hashing avec bcrypt/argon2 pour passwords (jamais MD5/SHA1), chiffrement at-rest sur données sensibles (BDD, backups).
Entrée utilisateur non sanitisée injectée dans une requête. Ex classique :
# VULNÉRABLE
query = f"SELECT * FROM users WHERE email = '{user_input}'"
# Si user_input = "x' OR '1'='1" → retourne tous les users
# SAFE — requête paramétrée
query = "SELECT * FROM users WHERE email = %s"
cursor.execute(query, (user_input,))
Mitigation : TOUJOURS utiliser des requêtes paramétrées / un ORM. JAMAIS de concaténation de string en SQL. Pareil pour shell commands : utiliser subprocess.run([...], shell=False), pas os.system(f"...").
Configs par défaut, comptes admin/admin, ports inutiles ouverts, messages d'erreur verbeux qui exposent la stack. Le piège le plus fréquent.
Mitigation : hardening checklist (cf modules 1-2), secure defaults, masquer les versions, désactiver les modes debug en prod.
Pas de 2FA, sessions trop longues, password policies faibles, brute-force permis.
Mitigation : 2FA obligatoire (cf module 3), rate-limiting sur /login (cf module 2), sessions courtes (4-8h max, regeneration après priv escalation), bcrypt avec coût élevé.
Le XSS permet à un attaquant d'injecter du JavaScript dans une page que d'autres users vont voir → vol de cookies, défacement, redirection malveillante.
location.hash, document.write, etc.# Côté serveur (Python Jinja2 / Django auto-escape activé par défaut)
{{ user_input }} # auto-escapé : < devient <
{{ user_input|safe }} # DANGEREUX, à éviter sauf certitude absolue
# Côté JS — utiliser textContent au lieu de innerHTML
element.textContent = userInput; // safe
element.innerHTML = userInput; // DANGEREUX
# Headers nginx (cf module 2)
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
L'XSS peut aussi venir de nom de fichier uploadé, URL d'avatar, champ "site web" de profil, etc. Tout ce qui peut être affiché plus tard est vecteur potentiel.
WordPress reste l'application web la plus piratée au monde (taille de l'install base + plugins fragiles). Checklist de durcissement.
define('DISALLOW_FILE_EDIT', true);add_filter('xmlrpc_enabled', '__return_false'); (souvent utilisé pour brute-force)// mu-plugins/disable-app-passwords.php
<?php
add_filter('wp_is_application_passwords_available', '__return_false');
// wp-config.php
define('DISABLE_WP_CRON', true);
// crontab : */15 * * * * curl -s https://votre-site.com/wp-cron.php?doing_wp_cron
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
Si un WP est piraté (cas vécu Ezway), il NE SUFFIT PAS de changer le mdp admin. Procédure complète :
find . -mtime -30) et nettoyerLe RGPD (Règlement Général sur la Protection des Données) impose des obligations à toute entité qui traite des données personnelles d'européens. La CNIL est l'autorité de contrôle en France.
| Principe | Concrètement |
|---|---|
| Licéité, loyauté, transparence | Base légale claire (consentement / contrat / intérêt légitime…) + information de la personne |
| Limitation des finalités | Données collectées pour un usage précis, pas réutilisables pour autre chose |
| Minimisation | Ne collecter QUE le strict nécessaire — pas "tout au cas où" |
| Exactitude | Données à jour, possibilité de correction |
| Limitation de conservation | Durée fixée selon finalité — purge automatique après |
| Intégrité & confidentialité | Sécurité technique adéquate (chiffrement, contrôle accès) |
Vous devez avoir un process documenté pour traiter ces demandes — pas juste "on verra le jour J".
Obligatoire pour toute org dès qu'elle traite des données perso (sauf moins de 250 employés ET pas de traitement à risque ET pas régulier — exception rare en pratique).
Pour chaque traitement, documenter :
Template Excel CNIL : cnil.fr/RGPD-registre
Contrat de sous-traitance avec chaque tiers à qui vous confiez des données perso (Zoho, Mailjet, AWS, Stripe, n8n cloud, votre webmaster freelance…). Article 28 RGPD obligatoire.
Le DPA doit fixer : objet, durée, nature/finalité du traitement, type de données, obligations du sous-traitant, sous-traitance ultérieure, fin du contrat.
La plupart des grands SaaS ont un DPA standard à signer en ligne (Zoho, AWS, Stripe, Mailjet, etc.).
Sur votre site web : quelles données vous collectez, pourquoi, durée, droits des personnes, contact DPO/responsable. Modèle CNIL : cnil.fr/modeles
Politique de Sécurité des Systèmes d'Information à diffuser aux employés. Pas obligatoire mais fortement recommandée.
L'article 33 RGPD impose de notifier la CNIL dans les 72 heures suivant la prise de connaissance d'une violation de données personnelles (sauf si risque négligeable).
Le défaut de notification est sanctionnable jusqu'à 10 M€ ou 2 % du CA mondial. Mieux vaut surdéclarer (la CNIL préfère, c'est sa mission) que de cacher pour minimiser.
Envoyer des données perso vers un pays hors UE/EEE est encadré. Les fournisseurs US (AWS US, Google US, OpenAI…) sont particulièrement scrutés depuis l'arrêt Schrems II.
Vous utilisez OpenAI API (US) dans un workflow n8n qui traite des leads clients. Compliance check :
Alternative : utiliser Anthropic via AWS Bedrock région Frankfurt, ou Mistral (FR), ou Claude Enterprise (DPA EU disponible).
Catégorie ULTRA-sensible (article 9 RGPD). Hébergement obligatoire chez un HDS (Hébergeur de Données de Santé) certifié. Liste : esante.gouv.fr.
Conséquence cas vécu (cf mémoire) : impossible de fournir un service SAV à un client mutuelle santé via votre stack standard. Il faudrait certifier le VPS/n8n HDS, ou refuser ce vertical, ou sous-traiter à un partenaire HDS.
Bandeau cookies obligatoire si vous utilisez des cookies non essentiels (analytics, marketing). Doit permettre le REFUS aussi facile que l'acceptation (pas de dark pattern).
Outils conformes : Iubenda, Axeptio (FR), Klaro (OSS).
Si vous avez de la vidéosurveillance ou des badges d'accès dans vos locaux : déclaration CNIL spécifique + information des employés/visiteurs + durée de conservation max 1 mois (sauf incident).