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

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

DDD
发布: 2025-01-23 00:15:09
原创
840 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板