首頁 > 後端開發 > C++ > 如何保護您的 API 免受未經授權的請求

如何保護您的 API 免受未經授權的請求

DDD
發布: 2025-01-23 00:15:09
原創
802 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板