Durcissement de la sécurité des APIs — rate limiting, validation d'entrée, headers de sécurité, CORS, protection contre les attaques courantes.
⚡ Installation & lancement en 1 commande
Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- api-security-hardener --launch
Copier
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } api-security-hardener -Launch"
Copier
🔑 Déclencheurs automatiques Le skill s'active automatiquement quand votre demande contient :
sécurité API rate limiting headers sécurité CORS API hardening protection API OWASP API
📖 Manuel
Durcissement de la Sécurité des APIs
Workflow
Auditer : identifier les failles potentielles (OWASP API Top 10).
Configurer : headers, CORS, rate limiting.
Valider : entrées, sorties, authentification.
Monitorer : logs de sécurité, détection d'anomalies.
OWASP API Top 10 — Checklist
# Risque Contrôle 1 Broken Object Level Authorization Vérifier l'ownership sur chaque ressource 2 Broken Authentication JWT court, refresh rotation, MFA 3 Broken Object Property Level Authorization DTO de réponse, pas d'entités directes 4 Unrestricted Resource Consumption Rate limiting, pagination obligatoire 5 Broken Function Level Authorization RBAC sur chaque endpoint 6 Unrestricted Access to Sensitive Business Flows Captcha, anti-bot, limites métier 7 Server Side Request Forgery Whitelist d'URLs, pas d'URLs utilisateur 8 Security Misconfiguration Headers, CORS strict, erreurs génériques 9 Improper Inventory Management Documenter tous les endpoints, décommissionner les anciens 10 Unsafe Consumption of APIs Valider les réponses des APIs tierces
Implémentation ASP.NET Core
Headers de sécurité
app.Use(async (context, next) =>
{
context.Response.Headers.Append("X-Content-Type-Options", "nosniff");
context.Response.Headers.Append("X-Frame-Options", "DENY");
context.Response.Headers.Append("X-XSS-Protection", "0");
context.Response.Headers.Append("Referrer-Policy", "strict-origin-when-cross-origin");
context.Response.Headers.Append("Content-Security-Policy", "default-src 'self'");
context.Response.Headers.Append("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
context.Response.Headers.Remove("Server");
context.Response.Headers.Remove("X-Powered-By");
await next();
});
Rate Limiting
builder.Services.AddRateLimiter(options =>
{
// Rate limit global
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(context =>
RateLimitPartition.GetFixedWindowLimiter(
partitionKey: context.Connection.RemoteIpAddress?.ToString() ?? "unknown",
factory: _ => new FixedWindowRateLimiterOptions
{
PermitLimit = 100,
Window = TimeSpan.FromMinutes(1)
}));
// Rate limit par endpoint
options.AddPolicy("strict", context =>
RateLimitPartition.GetSlidingWindowLimiter(
partitionKey: context.Connection.RemoteIpAddress?.ToString() ?? "unknown",
factory: _ => new SlidingWindowRateLimiterOptions
{
PermitLimit = 10,
Window = TimeSpan.FromMinutes(1),
SegmentsPerWindow = 4
}));
options.RejectionStatusCode = StatusCodes.Status429TooManyRequests;
});
// Usage
app.MapPost("/api/payments", handler).RequireRateLimiting("strict");
Validation d'entrée
public class CreatePaymentRequest
{
[Required]
[Range(1, 99999999, ErrorMessage = "Le montant doit être entre 1 et 99999999 centimes")]
public int Amount { get; set; }
[Required]
[RegularExpression("^(EUR|USD|GBP)$")]
public string Currency { get; set; }
[Required]
[StringLength(100, MinimumLength = 1)]
public string RecipientId { get; set; }
[MaxLength(10)]
public Dictionary<string, string>? Metadata { get; set; }
}
CORS strict
builder.Services.AddCors(options =>
{
options.AddPolicy("Production", policy =>
{
policy.WithOrigins("https://app.company.com", "https://admin.company.com")
.WithMethods("GET", "POST", "PUT", "DELETE")
.WithHeaders("Authorization", "Content-Type")
.SetMaxAge(TimeSpan.FromHours(1));
});
});
Règles
Ne jamais exposer les entités de base de données directement — toujours des DTOs .
Les messages d'erreur ne doivent jamais révéler des détails d'implémentation.
Chaque endpoint doit vérifier l'autorisation (pas seulement l'authentification).
Le rate limiting doit être appliqué avant la logique métier.
Logger les tentatives d'accès non autorisées pour la détection d'intrusion.
Ce skill est un outil de sécurité défensif. Il aide à protéger les APIs contre les attaques courantes.