Backend & Yazılım Mimarisi 6 dk okuma

ASP.NET Core API Güvenliği: Üretim Ortamı İçin En İyi Uygulamalar

6 dk okuma

Giriş

Modern backend sistemlerinde API, uygulamanın dış dünyaya açılan en kritik yüzeylerinden biridir. Mobil uygulamalar, web istemcileri, mikroservisler, üçüncü taraf entegrasyonlar ve otomasyonlar aynı API katmanı üzerinden veri alışverişi yapar. Bu nedenle API güvenliği yalnızca kullanıcı adı ve parola kontrolünden ibaret değildir; kimlik doğrulama, yetkilendirme, veri doğrulama, trafik kontrolü, güvenli iletişim ve izleme katmanlarının birlikte çalışması gerekir.

ASP.NET Core bu katmanların büyük bölümünü platform seviyesinde destekler. Ancak güvenli bir sonuç elde etmek için özellikleri doğru sırada, doğru kapsamda ve iş kurallarıyla uyumlu biçimde uygulamak önemlidir. Bu rehber, üretim ortamına çıkacak bir ASP.NET Core API için pratik bir güvenlik kontrol modeli sunar.

1. Kimlik Doğrulama ile Yetkilendirmeyi Ayırın

Authentication kullanıcının veya servisin kim olduğunu doğrular; authorization ise doğrulanmış kimliğin hangi kaynağa erişebileceğini belirler. Bu iki kavramın tek bir kontrol gibi ele alınması, özellikle rol ve yetki sayısı arttığında güvenlik açıklarına yol açabilir.

ASP.NET Core tarafında JWT Bearer, OpenID Connect veya kurumsal kimlik sağlayıcıları kullanılabilir. Endpoint erişimlerinde yalnızca giriş yapılmış olmasına güvenmek yerine policy tabanlı yetkilendirme tercih edilmelidir. Böylece rol, claim, tenant, scope veya özel iş kuralı tek bir policy altında açık biçimde tanımlanabilir.

2. JWT ve OAuth2 Kullanımında Sınırları Doğru Çizin

JWT, kimlik ve yetki bilgisini taşımak için kullanışlıdır; fakat token içinde hassas veri saklamak doğru değildir. Access token ömrü kısa tutulmalı, issuer, audience, imza ve süre kontrolleri eksiksiz yapılmalıdır.

OAuth2 veya OpenID Connect kullanılan yapılarda API’nin görevi kullanıcı parolasını yönetmek yerine güvenilir kimlik sağlayıcısının ürettiği tokenı doğrulamaktır. Refresh token mekanizması varsa erişim tokenından ayrı ele alınmalı, iptal ve rotasyon stratejileri tanımlanmalıdır.

3. Rate Limiting ve Throttling Uygulayın

Kimliği doğrulanmış bir istemci bile API kaynaklarını aşırı tüketebilir. ASP.NET Core rate limiting middleware’i sabit pencere, kayan pencere, token bucket ve concurrency gibi farklı sınırlandırma yaklaşımlarını destekler.

Limitler yalnızca IP adresine göre belirlenmemelidir. Kullanıcı, API anahtarı, tenant veya endpoint gibi bağlamlar dikkate alınabilir. Özellikle login, parola sıfırlama, OTP, arama ve maliyetli raporlama endpoint’lerinde daha sıkı limitler uygulanması faydalıdır.

4. Gelen Veriye Asla Güvenmeyin

Model binding başarılı oldu diye veri güvenli kabul edilmemelidir. Uzunluk, format, aralık, izin verilen değerler ve iş kuralı doğrulamaları sunucu tarafında yapılmalıdır. Beklenmeyen alanların doğrudan domain modeline bağlanması mass-assignment riskini artırabilir; bunun yerine request DTO’ları kullanılmalıdır.

SQL sorgularında parametreli komutlar veya güvenli ORM kullanımı tercih edilmeli, dosya yüklemelerinde dosya adı, MIME türü, uzantı, boyut ve içerik kontrolleri uygulanmalıdır. Hata mesajları saldırgana tablo, dosya yolu, stack trace veya iç servis bilgisi vermemelidir.

5. HTTPS, CORS ve Güvenlik Başlıklarını Birlikte Yönetin

Üretim ortamında API trafiği TLS üzerinden taşınmalıdır. Reverse proxy veya load balancer arkasında çalışan uygulamalarda forwarded headers ve HTTPS yönlendirme ayarları altyapıyla uyumlu yapılandırılmalıdır.

CORS bir kimlik doğrulama mekanizması değildir. Yalnızca tarayıcıların cross-origin erişimini kontrol eder. Gereksiz şekilde tüm origin, header ve metodlara izin vermek yerine ihtiyaç duyulan istemciler açıkça tanımlanmalıdır. Güvenlik başlıkları ve cache politikaları da API’nin veri tipine göre değerlendirilmelidir.

6. Secret ve Anahtarları Kaynak Koddan Çıkarın

Connection string, API key, signing key ve benzeri gizli bilgiler repository içinde tutulmamalıdır. Geliştirme ortamında user-secrets, üretimde ise güvenli secret store veya platformun secret yönetim mekanizması kullanılmalıdır.

Anahtar rotasyonu planı oluşturmak önemlidir. Bir secret’ın sızması halinde yalnızca değeri değiştirmek değil, eski değeri geçersiz kılmak ve etkilenen sistemleri izlemek gerekir.

7. Loglama ve Gözlemlenebilirliği Güvenli Tasarlayın

Güvenlik olayları ancak görünür olduklarında yönetilebilir. Başarısız kimlik doğrulama girişimleri, yetki reddi, rate-limit ihlalleri, beklenmeyen 4xx/5xx artışları ve kritik yönetim işlemleri ölçülmelidir.

Bununla birlikte loglara parola, access token, refresh token, kredi kartı bilgisi veya kişisel hassas veri yazılmamalıdır. Correlation ID, kullanıcı/tenant kimliği ve endpoint bilgisi gibi güvenli bağlam verileri olay incelemesini kolaylaştırır.

8. .NET 10 / ASP.NET Core 10 İçin Güncel Noktalar

.NET 10 uzun süreli destek (LTS) sürümüdür. ASP.NET Core 10; kimlik doğrulama/yetkilendirme, OpenAPI, Minimal API ve tanılama alanlarında geliştirmeler içerir.

Framework yükseltmelerinde yalnızca derleme başarısına güvenmek yerine davranış değişiklikleri, güvenlik kontrolleri ve gözlemlenebilirlik senaryoları entegrasyon testleriyle doğrulanmalıdır.

Sonuç

Güvenli API tek bir paket veya middleware ile elde edilmez. Kimlik doğrulama, yetkilendirme, token yaşam döngüsü, trafik sınırlandırma, girdi doğrulama, secret yönetimi, TLS ve gözlemlenebilirlik birlikte ele alındığında savunma derinliği oluşur.

ASP.NET Core’un yerleşik güvenlik bileşenlerini merkezi politikalarla kullanmak, endpoint bazlı dağınık kontrolleri azaltır ve sistem büyüdükçe güvenlik seviyesinin korunmasını kolaylaştırır. En iyi sonuç için bu kontroller CI/CD sürecindeki entegrasyon, güvenlik ve yük testleriyle düzenli olarak doğrulanmalıdır.

Araştırma Kaynakları ve İleri Okuma

Paylaş