首页 >后端开发 >C++ >如何保护您的 API 免受未经授权的请求

如何保护您的 API 免受未经授权的请求

DDD
DDD原创
2025-01-23 00:15:09806浏览

How to Secure Your API Against Unauthorized Requests

现代应用中,API 扮演着至关重要的角色,它连接着不同的系统。然而,API 也是未授权访问和滥用的常见目标。API 安全需要多层防护,结合 CORS 验证、强大的身份验证机制和可靠的监控。本文将介绍几种保护 API 的策略,确保只有可信客户端才能访问它。


1. 正确配置 CORS

跨域资源共享 (CORS) 是一项重要的安全机制,它决定了哪些来源可以与您的 API 交互。正确配置 CORS 至关重要,可以防止未授权访问。

ASP.NET Core 示例:

<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>

关键规则:

  • 避免 AllowAnyOrigin: 允许所有来源会使您的 API 容易受到攻击。
  • 不要使用 SetIsOriginAllowed(_ => true): 这会完全绕过来源验证。
  • 限制方法和标头: 将 AllowAnyMethod 和 AllowAnyHeader 限制在严格必要的范围内。

2. 实现身份验证和授权

身份验证确保只有授权的用户或系统才能访问您的端点。一种常见的方法是使用 JSON Web 令牌 (JWT)。

JWT 实现步骤:

  1. 在客户端,在请求标头中发送 JWT:
<code>   Authorization: Bearer <your-jwt-token></code>
  1. 在服务器端,验证令牌:
<code class="language-csharp">   app.UseAuthentication();
   app.UseAuthorization();</code>

ASP.NET Core 示例配置:

<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>

3. 显式验证 Origin 标头

即使配置了 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>

4. 阻止可疑 IP

过滤并阻止来自已知恶意 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>

5. 实现速率限制

通过限制客户端可以发出的请求数量,保护您的 API 免受滥用和暴力攻击。

ASP.NET Core 示例:

安装软件包:

<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>

6. 对所有连接使用 HTTPS

通过强制使用 HTTPS,确保客户端和您的 API 之间的安全通信。

在 ASP.NET Core 中配置 HTTPS:

<code class="language-csharp">webBuilder.UseKestrel()
          .UseHttps();</code>

重定向 HTTP 流量到 HTTPS:

<code class="language-csharp">app.UseHttpsRedirection();</code>

7. 监控和记录请求

实现日志记录以检测异常模式,例如来自未知来源的多个请求。

示例:

<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 InsightsSerilogElastic Stack 等工具进行全面监控。


8. 避免详细的错误响应

不要在错误消息中公开敏感信息,因为它可能会帮助攻击者。

示例:

<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 免受未授权请求需要多层方法:

  1. 正确配置 CORS
  2. 显式验证来源和标头。
  3. 实现 身份验证速率限制
  4. 使用 HTTPS 并监控流量。

通过遵循这些最佳实践,您可以显着降低未授权访问的风险,并确保只有可信客户端才能与您的 API 交互。

以上是如何保护您的 API 免受未经授权的请求的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn