Prévention OWASP Top 10 sur zones sensibles : auth, formulaires, SQL, API externes, secrets, uploads, HTML dynamique, CORS/CSP.
From codebloomnpx claudepluginhub vendeesign/codebloom --plugin codebloomThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Ce skill s'active quand du code touche à des zones sensibles, pour prévenir les failles avant la review.
* en production expose l'API à n'importe quel site// MAL — confiance aveugle
app.post('/search', (req, res) => {
const results = search(req.body.query) // non validé, non limité
})
// BIEN — validé et limité
app.post('/search', (req, res) => {
const { query } = schema.parse(req.body) // Zod/Joi valide et tronque
const results = search(query)
})
// MAL — injection SQL via concaténation
$wpdb->query("DELETE FROM users WHERE id = $id")
// BIEN — requête préparée
$wpdb->query($wpdb->prepare("DELETE FROM users WHERE id = %d", $id))
// MAL — pas de timeout, pas de validation
const data = await fetch(url).then(r => r.json())
// BIEN — timeout + validation de la réponse
const res = await fetch(url, { signal: AbortSignal.timeout(5000) })
if (!res.ok) throw new Error(`API error: ${res.status}`)
const data = schema.parse(await res.json())
.env dans .gitignore — un .env pushé par erreur expose tous les secrets du projet, et l'historique git les garde même après suppression.env.example sans valeurs réelles — sert de documentation pour l'équipe sans risque de fuitegit log est public sur les repos open source// MAL — injection SQL
db.query(`SELECT * FROM users WHERE id = ${userId}`)
// BIEN — paramétré
db.query('SELECT * FROM users WHERE id = $1', [userId])
// MAL — XSS
element.innerHTML = userInput
// BIEN — échappé
element.textContent = userInput
// MAL — secret en dur
const API_KEY = "sk-abc123..."
// BIEN — variable d'environnement
const API_KEY = process.env.API_KEY
Pour les bonnes pratiques générales d'error handling (catch vide, fail fast, erreurs async), voir la skill
code-quality.
Pour les patterns backend (auth, API, DB), voir la skill
backend.
Pour les zones critiques (auth, paiement, données sensibles), évaluer chaque composant :
| Menace | Question | Exemple |
|---|---|---|
| Spoofing | Peut-on usurper une identité ? | Token volé, session hijack |
| Tampering | Peut-on altérer les données ? | Modification de payload, man-in-the-middle |
| Repudiation | Peut-on nier une action ? | Pas de logs d'audit, pas de trace |
| Information Disclosure | Peut-on accéder à des données non autorisées ? | Stack traces exposées, IDOR, logs avec PII |
| Denial of Service | Peut-on rendre le service indisponible ? | Pas de rate limiting, regex catastrophique |
| Elevation of Privilege | Peut-on escalader les permissions ? | IDOR, role manipulation, JWT sans vérification |
Labelliser les données manipulées :
| Niveau | Impact si fuite | Exemples |
|---|---|---|
| RESTRICTED | Responsabilité légale | Mots de passe, cartes de crédit, données de santé |
| CONFIDENTIAL | Dommage business | Emails, données clients, contrats |
| INTERNAL | Embarrassment | Code source, config interne, métriques |
| PUBLIC | Aucun | Pages marketing, docs publiques |
Les données RESTRICTED et CONFIDENTIAL nécessitent chiffrement au repos et en transit, accès loggé, et rétention limitée.
Ces problèmes doivent être corrigés avant de continuer :
Signaler sans bloquer :
En cas de doute sur la classification → toujours traiter comme Critical. Mieux vaut bloquer à tort que laisser passer une faille.