在現代應用中,API 扮演著至關重要的角色,它連接著不同的系統。然而,API 也是未授權存取和濫用的常見目標。 API 安全需要多層防護,結合 CORS 驗證、強大的身份驗證機制和可靠的監控。本文將介紹幾種保護 API 的策略,確保只有可信任用戶端才能存取它。
跨域資源共享 (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>
身份驗證可確保只有授權的使用者或系統才能存取您的端點。一種常見的方法是使用 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中文網其他相關文章!