Rumah > pembangunan bahagian belakang > C++ > Cara Melindungi API Anda Terhadap Permintaan Tidak Dibenarkan

Cara Melindungi API Anda Terhadap Permintaan Tidak Dibenarkan

DDD
Lepaskan: 2025-01-23 00:15:09
asal
803 orang telah melayarinya

How to Secure Your API Against Unauthorized Requests

Dalam aplikasi moden, API memainkan peranan penting, menghubungkan sistem yang berbeza. Walau bagaimanapun, API juga merupakan sasaran biasa untuk akses dan penyalahgunaan yang tidak dibenarkan. Keselamatan API memerlukan berbilang lapisan perlindungan, menggabungkan pengesahan CORS, mekanisme pengesahan yang kukuh dan pemantauan yang boleh dipercayai. Artikel ini akan menerangkan beberapa strategi untuk melindungi API anda untuk memastikan bahawa hanya pelanggan yang dipercayai boleh mengaksesnya.


1 Konfigurasikan CORS dengan betul

Cross-Origin Resource Sharing (CORS) ialah mekanisme keselamatan penting yang menentukan asal-usul yang boleh berinteraksi dengan API anda. Mengkonfigurasi CORS dengan betul adalah penting untuk mengelakkan capaian yang tidak dibenarkan.

Contoh Teras ASP.NET:

<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>
Salin selepas log masuk
Salin selepas log masuk

Peraturan Utama:

  • Elakkan AllowAnyOrigin: Membenarkan semua asal menjadikan API anda terdedah.
  • Jangan gunakan SetIsOriginAllowed(_ => true): ini akan memintas sepenuhnya pengesahan asal.
  • Hadkan kaedah dan pengepala: Hadkan AllowAnyMethod dan AllowAnyHeader kepada skop yang sangat diperlukan.

2. Laksanakan pengesahan dan kebenaran

Pengesahan memastikan bahawa hanya pengguna atau sistem yang dibenarkan boleh mengakses titik akhir anda. Satu kaedah biasa ialah menggunakan Token Web JSON (JWT).

Langkah pelaksanaan JWT:

  1. Di sisi pelanggan, hantar JWT dalam pengepala permintaan:
<code>   Authorization: Bearer <your-jwt-token></code>
Salin selepas log masuk
  1. Di bahagian pelayan, sahkan token:
<code class="language-csharp">   app.UseAuthentication();
   app.UseAuthorization();</code>
Salin selepas log masuk

Konfigurasi sampel Teras ASP.NET:

<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>
Salin selepas log masuk

3. Sahkan pengepala Asal dengan jelas

Walaupun CORS dikonfigurasikan, anda boleh menambah lapisan keselamatan tambahan dengan mengesahkan pengepala Origin secara manual dalam perisian tengah bahagian pelayan.

Contoh:

<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>
Salin selepas log masuk

4. Sekat IP yang mencurigakan

Tapis dan sekat permintaan daripada alamat IP berniat jahat yang diketahui untuk mengurangkan vektor serangan.

Contoh perisian tengah:

<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>
Salin selepas log masuk

5. Laksanakan pengehadan kadar

Lindungi API anda daripada penyalahgunaan dan serangan kekerasan dengan mengehadkan bilangan permintaan yang boleh dibuat oleh pelanggan.

Contoh Teras ASP.NET:

Pasang pakej:

<code class="language-bash">dotnet add package AspNetCoreRateLimit</code>
Salin selepas log masuk

Konfigurasikan had kadar:

<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>
Salin selepas log masuk

6. Gunakan HTTPS untuk semua sambungan

Pastikan komunikasi selamat antara pelanggan dan API anda dengan memaksa penggunaan HTTPS.

Konfigurasikan HTTPS dalam Teras ASP.NET:

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

Ubah hala trafik HTTP ke HTTPS:

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

7. Pemantauan dan permintaan log

Laksanakan pengelogan untuk mengesan corak luar biasa, seperti berbilang permintaan daripada sumber yang tidak diketahui.

Contoh:

<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>
Salin selepas log masuk

Gunakan alatan seperti Application Insights, Serilog atau Elastic Stack untuk pemantauan menyeluruh.


8. Elakkan jawapan ralat terperinci

Jangan dedahkan maklumat sensitif dalam mesej ralat kerana ia boleh membantu penyerang.

Contoh:

<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>
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

Melindungi API anda daripada permintaan yang tidak dibenarkan memerlukan pendekatan berbilang lapisan:

  1. Konfigurasikan CORS dengan betul.
  2. Sahkan sumber dan pengepala secara eksplisit.
  3. Melaksanakan Pengesahan dan Penghadan Kadar.
  4. Gunakan HTTPS dan pantau trafik.

Dengan mengikuti amalan terbaik ini, anda boleh mengurangkan risiko akses tanpa kebenaran dengan ketara dan memastikan bahawa hanya pelanggan yang dipercayai boleh berinteraksi dengan API anda.

Atas ialah kandungan terperinci Cara Melindungi API Anda Terhadap Permintaan Tidak Dibenarkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan