现代应用中,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中文网其他相关文章!