NVD API 2.0 ile Kendi CVE Takip Sistemini Kurmak
Rate limit sınırlarından normalize edilmemiş vendor isimlerine kadar, CVE ingestion pipeline'ı kurarken karşılaşacağın gerçek sorunlar.
NVD'nin yeni API'si (2.0) eski sürümden çok daha güçlü — ama birkaç tuzak var. Özellikle rate limiting ve vendor ismi normalizasyonu konusunda belgelerin söylemediği şeyler var.
Rate Limit Gerçeği
API anahtarsız kullanımda 5 istek/30 saniye, anahtarlı kullanımda 50 istek/30 saniye sınırı var. Tüm CVE veritabanını çekmek istiyorsanız (şu an 250.000+ kayıt) bu ciddi bir bekleme süresi demek. Çözüm: lastModStartDate parametresiyle delta sync yapın, her seferinde tümünü çekmeyin.
const url = new URL('https://services.nvd.nist.gov/rest/json/cves/2.0');
url.searchParams.set('lastModStartDate', lastSyncDate.toISOString());
url.searchParams.set('lastModEndDate', new Date().toISOString());
Vendor İsmi Normalizasyonu
CPE verisi içindeki vendor isimleri tutarsız: apache, apache_software_foundation, the_apache_software_foundation hepsi aynı kuruluşu temsil ediyor. Fuzzy matching veya curated bir eşleştirme tablosu olmadan ürün bazlı filtreleme yapamıyorsunuz.
Öneri: Minimal Schema
Her CVE için sadece ihtiyacınız olan alanları saklayın: cveId, description, cvssV3Score, affectedProducts[], publishedDate. Full JSON'ı saklamak depolama maliyetini 10x artırıyor, sorgu performansını düşürüyor.