Sécurité IA

Sécurité API en vibe coding : les 4 fondamentaux à verrouiller avant de ship

Rate limiting, CORS, injection SQL/NoSQL et XSS : le socle sécurité minimal pour lancer une app IA sans publier une passoire.

///9 min de lecture

Tu connais ce moment en vibe coding : l’app marche, tu veux ship, puis tu te demandes “c’est safe ou pas du tout ?“. Bonne nouvelle : tu n’as pas besoin d’être expert cybersécurité pour éviter les pires erreurs. Mauvaise nouvelle : si tu ignores les bases, ton app finira exposée.

TL;DR

Si tu n’as que 30 minutes, verrouille ces 4 points dans cet ordre :

  1. Rate limiting pour stopper les abus et les bots agressifs.
  2. CORS strict pour limiter qui peut appeler ton backend.
  3. Protection SQL/NoSQL injection via requêtes paramétrées + validation d’input.
  4. Protection XSS via nettoyage des entrées et encodage de sortie.

Ce socle ne rend pas ton app invincible, mais il élimine une grosse partie des failles évitables. Ces 4 points couvrent les risques les plus fréquents identifiés par l’OWASP Top 10.

Pourquoi ces 4 protections sont-elles le minimum syndical ?

Quand une app IA part en prod trop vite, le risque n’est pas théorique :

  • Explosion de coûts API à cause du spam.
  • Exposition de données via endpoints mal protégés.
  • Corruption ou fuite de base de données.
  • Exécution de scripts malveillants chez tes utilisateurs.

Tu peux déjà éviter ça avec des contrôles simples, reproductibles, et testables.

Comment mettre en place le rate limiting ?

Le but est simple : empêcher un client de frapper tes endpoints sans limite. C’est le “videur de ton API”.

Exemple Express :

import rateLimit from 'express-rate-limit';

const limiter = rateLimit({
  windowMs: 60 * 1000, // 1 minute
  max: 100,            // 100 requêtes par IP
  standardHeaders: true,
  legacyHeaders: false
});

app.use('/api', limiter);

Ce que tu dois mesurer :

  • Nombre de requêtes bloquées par IP.
  • Endpoints les plus ciblés.
  • Pic de trafic anormal par tranche de 5 minutes.

Pour aller plus loin, la documentation MDN sur le rate limiting détaille les stratégies avancées (sliding window, token bucket).

Comment configurer CORS correctement ?

CORS définit quels domaines navigateur peuvent appeler ton API. C’est “la liste d’invités de ton backend”.

Configuration minimale :

import cors from 'cors';

app.use(cors({
  origin: ['https://monapp.com', 'https://staging.monapp.com'],
  methods: ['GET', 'POST', 'PUT', 'DELETE'],
  credentials: true
}));

Erreurs classiques :

  • origin: * en production avec des cookies/sessions.
  • Oublier d’aligner environnement staging/prod.
  • Laisser des sous-domaines de test ouverts.

Référence complète : MDN - Cross-Origin Resource Sharing (CORS).

Comment se protéger contre les injections SQL/NoSQL ?

Une injection arrive quand ton code concatène des entrées utilisateur dans des requêtes. C’est l’une des failles les plus anciennes et les plus exploitées selon l’OWASP SQL Injection Prevention Cheat Sheet.

Règle simple :

  • Jamais de concaténation SQL.
  • Toujours des requêtes paramétrées.
  • Validation stricte du payload en entrée.

Mauvais exemple :

const query = `SELECT * FROM users WHERE email = '${email}'`;

Bon réflexe :

const user = await prisma.user.findUnique({
  where: { email }
});

Comment bloquer les attaques XSS ?

Le XSS arrive quand du contenu utilisateur est réinjecté dans une page sans nettoyage/encodage. L’OWASP XSS Prevention Cheat Sheet est la référence pour les stratégies de mitigation.

Base de protection :

  • Nettoyer les entrées (surtout HTML riche).
  • Échapper les sorties dans le rendu.
  • Bloquer les scripts inline via CSP quand possible.

Exemple de nettoyage côté serveur :

import sanitizeHtml from 'sanitize-html';

const safeComment = sanitizeHtml(req.body.comment, {
  allowedTags: [],
  allowedAttributes: {}
});

Prompt IA prêt à copier (base sécurisée)

Utilise ce prompt comme “pré-prompt sécurité” dans ton assistant de code :

Ajoute une couche de sécurité minimale à mon backend Node.js :
- rate limiting (100 req/min/ip) sur /api
- CORS limité à https://monapp.com et https://staging.monapp.com
- validation stricte des inputs
- requêtes SQL/NoSQL sécurisées (pas de concat)
- sanitation anti-XSS sur tous les champs texte utilisateurs
- tests de non-régression pour ces 4 points
Explique chaque choix en 1 phrase.

Plan d’action en 60 minutes

  1. Ajouter rate limiting global sur /api.
  2. Restreindre CORS avec une whitelist explicite.
  3. Passer toutes les requêtes DB en mode paramétré.
  4. Nettoyer tous les champs texte utilisateur.
  5. Tester avec 4 scénarios d’attaque simples.

Checklist sécurité avant déploiement

  • Rate limiting configuré et testé sur tous les endpoints /api.
  • CORS restreint à une liste blanche explicite (pas de * en prod).
  • Toutes les requêtes DB utilisent des paramètres liés (pas de concaténation).
  • Tous les champs texte utilisateur sont nettoyés (sanitize) avant stockage et affichage.
  • Les en-têtes de sécurité HTTP sont en place (CSP, X-Content-Type-Options, X-Frame-Options).
  • Les tests couvrent au moins 1 scénario d’attaque par type (rate limit, CORS, injection, XSS).
  • Les secrets (clés API, tokens) ne sont jamais en dur dans le code source.

Si un point n’est pas coché : ne déploie pas.

FAQ

Ces 4 protections suffisent-elles pour une app en production ?

Non. Elles couvrent le minimum vital pour ne pas publier une passoire. Ensuite, tu dois ajouter une authentification robuste (JWT, OAuth), une gestion des secrets (vault ou variables d’environnement sécurisées), des logs de sécurité, du monitoring et des tests de pénétration continus. Considère ces 4 briques comme la fondation, pas le toit.

Quel est le point le plus urgent si je dois choisir ?

Commence par le rate limiting et les injections SQL/NoSQL. Le rate limiting te protège contre l’explosion de coûts (surtout avec des APIs IA facturées au token), et les injections sont souvent le vecteur d’attaque le plus destructeur car elles donnent accès direct à ta base de données.

L’IA peut-elle générer du code sécurisé seule ?

Pas de manière fiable sans garde-fous explicites. Les modèles de code produisent souvent du code fonctionnel mais pas nécessairement sécurisé. Il faut demander explicitement les contrôles de sécurité dans ton prompt, puis vérifier et tester le code généré avant tout déploiement. Ne fais jamais confiance aveuglément au code IA pour la sécurité.

Est-ce utile même pour un MVP ?

Oui, absolument. Un MVP exposé devient vite une dette de sécurité et de réputation. Une fuite de données utilisateur sur un produit en early stage peut tuer la confiance avant même que le produit ait une chance de grandir. Les 60 minutes d’investissement décrites ici sont négligeables comparées au coût d’un incident.

Conclusion

Le vrai move en 2026 n’est pas “coder plus vite”. Le vrai move, c’est “ship vite sans exposer tes users ni ton infra”.

Si tu poses ces 4 briques dès le début, tu dors mieux, ton équipe aussi, et ton produit passe un cap.