Dans les applications modernes, les API jouent un rôle essentiel en connectant différents systèmes. Cependant, les API sont également des cibles courantes d’accès non autorisés et d’abus. La sécurité des API nécessite plusieurs couches de protection, combinant une validation CORS, des mécanismes d'authentification forts et une surveillance fiable. Cet article décrira plusieurs stratégies pour sécuriser votre API afin de garantir que seuls les clients de confiance peuvent y accéder.
Le partage de ressources entre origines croisées (CORS) est un mécanisme de sécurité important qui détermine quelles origines peuvent interagir avec votre API. Une configuration correcte de CORS est essentielle pour empêcher tout accès non autorisé.
<code class="language-csharp">builder.Services.AddCors(options => { options.AddPolicy("RestrictOrigins", policy => { policy.WithOrigins("https://mywebsite.com", "https://trustedpartner.com") // 允许的来源 .AllowAnyHeader() .AllowAnyMethod(); }); }); // 应用 CORS 策略 app.UseCors("RestrictOrigins");</code>
L'authentification garantit que seuls les utilisateurs ou systèmes autorisés peuvent accéder à vos points de terminaison. Une méthode courante consiste à utiliser des jetons Web JSON (JWT).
<code> Authorization: Bearer <your-jwt-token></code>
<code class="language-csharp"> app.UseAuthentication(); app.UseAuthorization();</code>
<code class="language-csharp">builder.Services.AddAuthentication("Bearer") .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "https://mywebsite.com", ValidAudience = "https://mywebsite.com", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret-key")) }; });</code>
Même si CORS est configuré, vous pouvez ajouter une couche de sécurité supplémentaire en validant manuellement l'en-tête Origin dans le middleware côté serveur.
<code class="language-csharp">app.Use(async (context, next) => { var origin = context.Request.Headers["Origin"].ToString(); var allowedOrigins = new[] { "https://mywebsite.com", "https://trustedpartner.com" }; if (!string.IsNullOrEmpty(origin) && !allowedOrigins.Contains(origin)) { context.Response.StatusCode = StatusCodes.Status403Forbidden; await context.Response.WriteAsync("Origin not allowed."); return; } await next(); });</code>
Filtrez et bloquez les requêtes provenant d'adresses IP malveillantes connues pour réduire les vecteurs d'attaque.
<code class="language-csharp">app.Use(async (context, next) => { var clientIp = context.Connection.RemoteIpAddress; var blockedIps = new[] { "192.168.1.100", "10.0.0.50" }; if (blockedIps.Contains(clientIp.ToString())) { context.Response.StatusCode = StatusCodes.Status403Forbidden; await context.Response.WriteAsync("Blocked IP."); return; } await next(); });</code>
Protégez votre API contre les abus et les attaques par force brute en limitant le nombre de requêtes qu'un client peut effectuer.
Installez le package :
<code class="language-bash">dotnet add package AspNetCoreRateLimit</code>
Configurer la limite de débit :
<code class="language-csharp">builder.Services.AddMemoryCache(); builder.Services.Configure<IpRateLimitOptions>(options => { options.GeneralRules = new List<RateLimitRule> { new RateLimitRule { Endpoint = "*", Limit = 100, // 请求限制 Period = "1m" // 每分钟 } }; }); builder.Services.AddInMemoryRateLimiting(); app.UseIpRateLimiting();</code>
Assurez une communication sécurisée entre les clients et votre API en forçant l'utilisation du HTTPS.
<code class="language-csharp">webBuilder.UseKestrel() .UseHttps();</code>
Rediriger le trafic HTTP vers HTTPS :
<code class="language-csharp">app.UseHttpsRedirection();</code>
Implémentez la journalisation pour détecter les modèles inhabituels, tels que plusieurs requêtes provenant de sources inconnues.
<code class="language-csharp">app.Use(async (context, next) => { var origin = context.Request.Headers["Origin"].ToString(); Console.WriteLine($"Request from origin: {origin}"); await next(); });</code>
Utilisez des outils tels que Application Insights, Serilog ou Elastic Stack pour une surveillance complète.
N'exposez pas d'informations sensibles dans les messages d'erreur, car cela pourrait aider les attaquants.
<code class="language-csharp">builder.Services.AddCors(options => { options.AddPolicy("RestrictOrigins", policy => { policy.WithOrigins("https://mywebsite.com", "https://trustedpartner.com") // 允许的来源 .AllowAnyHeader() .AllowAnyMethod(); }); }); // 应用 CORS 策略 app.UseCors("RestrictOrigins");</code>
Sécuriser votre API contre les requêtes non autorisées nécessite une approche à plusieurs niveaux :
En suivant ces bonnes pratiques, vous pouvez réduire considérablement le risque d'accès non autorisé et garantir que seuls les clients de confiance peuvent interagir avec votre API.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!