🔒 Sécurité

api-security-hardener

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
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } api-security-hardener -Launch"

🚀 Déjà installé ?

claude "/api-security-hardener"

Ou tapez /api-security-hardener dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

sécurité APIrate limitingheaders sécuritéCORSAPI hardeningprotection APIOWASP API

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/security-skills/api-security-hardener ~/.claude/skills/

Source : security-skills/api-security-hardener

📖 Manuel

Durcissement de la Sécurité des APIs

Workflow

  1. Auditer : identifier les failles potentielles (OWASP API Top 10).
  2. Configurer : headers, CORS, rate limiting.
  3. Valider : entrées, sorties, authentification.
  4. Monitorer : logs de sécurité, détection d'anomalies.

OWASP API Top 10 — Checklist

#RisqueContrôle
1Broken Object Level AuthorizationVérifier l'ownership sur chaque ressource
2Broken AuthenticationJWT court, refresh rotation, MFA
3Broken Object Property Level AuthorizationDTO de réponse, pas d'entités directes
4Unrestricted Resource ConsumptionRate limiting, pagination obligatoire
5Broken Function Level AuthorizationRBAC sur chaque endpoint
6Unrestricted Access to Sensitive Business FlowsCaptcha, anti-bot, limites métier
7Server Side Request ForgeryWhitelist d'URLs, pas d'URLs utilisateur
8Security MisconfigurationHeaders, CORS strict, erreurs génériques
9Improper Inventory ManagementDocumenter tous les endpoints, décommissionner les anciens
10Unsafe Consumption of APIsValider 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

Ce skill est un outil de sécurité défensif. Il aide à protéger les APIs contre les attaques courantes.