Bir yazılım projesine başlarken ilk odak noktası çoğunlukla çalışan bir ürün ortaya çıkarmaktır. Sayfaların hızlı yüklenmesi, kullanıcıların rahatça alışveriş yapabilmesi ve sipariş süreçlerinin sorunsuz işlemesi birincil hedefler arasında yer alır. Ancak günümüz web ekosisteminde yalnızca çalışan bir sistem geliştirmek yeterli değildir. Asıl mühendislik başarısı, bu sistemi kötü niyetli girişimlere, otomatik botlara ve beklenmedik siber tehditlere karşı ilk andan itibaren dayanıklı kılabilmektir. Staj sürecimde geliştirdiğim Mini E-Commerce Platform projesi boyunca edindiğim en kritik vizyon, güvenliğin projelerin sonuna eklenen geçici bir yama değil, mimarinin temel taşı olduğu gerçeğidir.
Kurumsal düzeyde bir REST API güvenliği inşa ederken ilk savunma hattını sunucu başlıkları ve sunucu kimliğinin gizlenmesi oluşturur. Standart bir Express.js sunucusu, istemciye gönderdiği yanıtlarda kendi çalışma ortamını açıkça belirten başlıklar iletir. Bu durum saldırganların sunucunun versiyonuna ve olası zafiyetlerine dair fikir edinmesini kolaylaştırır. Geliştirme sürecimizde ilk olarak bu sunucu parmak izini gizledik ve küresel web güvenliği standartlarını belirleyen OWASP ilkelerini devreye aldık. Tarayıcıların stil ve betik dosyalarını yanlış yorumlamasını engelleyen nosniff kuralı, uygulamanın iframe içinde izinsiz çalıştırılarak kullanıcıların yanıltılmasını önleyen clickjacking koruması ve yalnızca güvenli HTTPS bağlantılarını zorunlu kılan katı kurallar sayesinde sistemimizi tarayıcı düzeyinde güvence altına aldık.
İkinci savunma hattı, sistem kaynaklarının kötüye kullanımını ve kaba kuvvet saldırılarını engellemeye yöneliktir. Özellikle kullanıcı girişi, kayıt ve ödeme gibi hassas sayfalarda otomatik botların oluşturabileceği DoS tehditleri sistemin çökmesine neden olabilir. Bu riski bertaraf etmek adına kayan pencereli bellek içi bir hız sınırlama mekanizması kurduk. Bu mekanizma, her bir istemcinin belirli bir zaman diliminde yapabileceği istek sayısını takip eder, kullanıcıya kalan hakkını bildirir ve belirlenen eşik aşıldığında sistemi yormadan standart bir uyarı yanıtı üretir. Aynı zamanda sunucu belleğinde birikme olmaması için süresi dolan kayıtların arka planda düzenli olarak temizlenmesini sağlayarak yüksek performanslı bir koruma elde ettik.
Üçüncü ve en hayati savunma katmanını ise kullanıcı girdilerinin derinlemesine temizlenmesi, yani sanitizasyon oluşturmaktadır. Kullanıcıların profil güncellemeleri, ürün yorumları veya adres bilgileri girdiği alanlar, siteler arası betik çalıştırma olarak bilinen XSS saldırılarının en yaygın hedefleridir. Basit bir metin alanını kontrol etmek tek başına yeterli değildir; kullanıcıların gönderdiği karmaşık ve iç içe geçmiş veri yapıları da taranmalıdır. Geliştirdiğimiz özyinelemeli temizleme yapısı sayesinde gelen tüm veriler katman katman incelenir. Kötü niyetli komut dosyaları, tehlikeli HTML etiketleri ve JavaScript tetikleyicileri veritabanına ulaşamadan sunucu girişinde bertaraf edilir. Bu yaklaşım, sistemin veri bütünlüğünü korurken prototip kirlenmesi gibi modern JavaScript açıklarının da önüne geçmektedir.
Tüm bu güvenlik önlemlerinin kağıt üzerinde kalmaması için sistemin sağlık durumunu anlık olarak denetleyen izleme uç noktaları oluşturduk ve geliştirdiğimiz her koruma kuralını otomatik güvenlik testleriyle doğruladık. On altı bağımsız senaryodan oluşan otomatik testlerimiz, sunucunun her koşulda güvenli yanıtlar verdiğini sürekli olarak denetlemektedir.