ホームページ > バックエンド開発 > C++ > 不正なリクエストから API を保護する方法

不正なリクエストから API を保護する方法

DDD
リリース: 2025-01-23 00:15:09
オリジナル
840 人が閲覧しました

How to Secure Your API Against Unauthorized Requests

最新のアプリケーションでは、API が重要な役割を果たし、さまざまなシステムを接続します。ただし、API は不正アクセスや悪用の一般的なターゲットでもあります。 API セキュリティには、CORS 検証、強力な認証メカニズム、信頼性の高いモニタリングを組み合わせた、複数の保護層が必要です。この記事では、信頼できるクライアントのみが API にアクセスできるように API を保護するためのいくつかの戦略について説明します。


1. CORS を正しく構成します

Cross-Origin Resource Sharing (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. 認証と認可を実装する

認証により、承認されたユーザーまたはシステムのみがエンドポイントにアクセスできるようになります。一般的な方法の 1 つは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート