最新のアプリケーションでは、API が重要な役割を果たし、さまざまなシステムを接続します。ただし、API は不正アクセスや悪用の一般的なターゲットでもあります。 API セキュリティには、CORS 検証、強力な認証メカニズム、信頼性の高いモニタリングを組み合わせた、複数の保護層が必要です。この記事では、信頼できるクライアントのみが API にアクセスできるように API を保護するためのいくつかの戦略について説明します。
Cross-Origin Resource Sharing (CORS) は、どのオリジンが API と対話できるかを決定する重要なセキュリティ メカニズムです。不正アクセスを防ぐには、CORS を正しく構成することが重要です。
<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>
認証により、承認されたユーザーまたはシステムのみがエンドポイントにアクセスできるようになります。一般的な方法の 1 つは、JSON Web トークン (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>
CORS が構成されている場合でも、サーバー側のミドルウェアで Origin ヘッダーを手動で検証することで、セキュリティ層を追加できます。
<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>
既知の悪意のある IP アドレスからのリクエストをフィルタリングしてブロックし、攻撃ベクトルを減らします。
<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>
クライアントが実行できるリクエストの数を制限することで、API を悪用やブルート フォース攻撃から保護します。
パッケージをインストールします:
<code class="language-bash">dotnet add package AspNetCoreRateLimit</code>
レート制限の構成:
<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>
HTTPS の使用を強制することで、クライアントと API 間の安全な通信を確保します。
<code class="language-csharp">webBuilder.UseKestrel() .UseHttps();</code>
HTTP トラフィックを HTTPS にリダイレクトします:
<code class="language-csharp">app.UseHttpsRedirection();</code>
未知のソースからの複数のリクエストなど、異常なパターンを検出するためのロギングを実装します。
<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>
包括的な監視には、Application Insights、Serilog、Elastic Stack などのツールを使用します。
攻撃者を助ける可能性があるため、エラー メッセージで機密情報を公開しないでください。
<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>
不正なリクエストから API を保護するには、多層のアプローチが必要です。
これらのベスト プラクティスに従うことで、不正アクセスのリスクを大幅に軽減し、信頼できるクライアントのみが API と対話できるようにすることができます。
以上が不正なリクエストから API を保護する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。