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.
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.
<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>
Pengesahan memastikan bahawa hanya pengguna atau sistem yang dibenarkan boleh mengakses titik akhir anda. Satu kaedah biasa ialah menggunakan Token Web JSON (JWT).
<code> Authorization: Bearer <your-jwt-token></code>
<code class="language-csharp"> app.UseAuthentication(); app.UseAuthorization();</code>
<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>
Walaupun CORS dikonfigurasikan, anda boleh menambah lapisan keselamatan tambahan dengan mengesahkan pengepala Origin secara manual dalam perisian tengah bahagian pelayan.
<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>
Tapis dan sekat permintaan daripada alamat IP berniat jahat yang diketahui untuk mengurangkan vektor serangan.
<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>
Lindungi API anda daripada penyalahgunaan dan serangan kekerasan dengan mengehadkan bilangan permintaan yang boleh dibuat oleh pelanggan.
Pasang pakej:
<code class="language-bash">dotnet add package AspNetCoreRateLimit</code>
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>
Pastikan komunikasi selamat antara pelanggan dan API anda dengan memaksa penggunaan HTTPS.
<code class="language-csharp">webBuilder.UseKestrel() .UseHttps();</code>
Ubah hala trafik HTTP ke HTTPS:
<code class="language-csharp">app.UseHttpsRedirection();</code>
Laksanakan pengelogan untuk mengesan corak luar biasa, seperti berbilang permintaan daripada sumber yang tidak diketahui.
<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>
Gunakan alatan seperti Application Insights, Serilog atau Elastic Stack untuk pemantauan menyeluruh.
Jangan dedahkan maklumat sensitif dalam mesej ralat kerana ia boleh membantu penyerang.
<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>
Melindungi API anda daripada permintaan yang tidak dibenarkan memerlukan pendekatan berbilang lapisan:
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!