npm Paket Yayınlama Güvenlik Kuralları: Yeni Dönemin Tam Rehberi
npm, süresiz token’ları kaldırarak granular erişim, zorunlu 2FA ve trusted publishing sistemine geçiyor. Eski npm publish alışkanlıkları artık geçerli değil.

Neden değişim gerekti?
npm, dünya çapında milyonlarca geliştiricinin kod dağıtımını yöneten en büyük ekosistem. Bu kadar geniş bir yapı, beraberinde büyük güvenlik riskleri de getiriyor. Geçmişte bazı popüler paketlerin hesapları ele geçirilerek zararlı sürümler yayınlandı — ve bu sürümler binlerce projeye otomatik olarak yüklendi.
Bu olaylar, “publish” sürecinin bir güvenlik eylemi haline gelmesi gerektiğini gösterdi. Artık sadece kod yazmak değil, yayın sürecini güvence altına almak da geliştiricinin sorumluluğunda.
Değişikliğin özeti
npm, klasik ve süresiz erişim token’larını devre dışı bırakıyor. Yerine:
Granular Access Token: Kısa ömürlü ve yalnızca belirli paketlere yetkili.
Trusted Publishing: CI/CD sistemleri kimliğini kanıtlayarak publish yapabiliyor.
Zorunlu 2FA: Hesabına erişim için ikinci faktör şart.
Bu adımların amacı, supply-chain saldırılarını minimize etmek — özellikle çalınan token’lar veya sızdırılmış CI anahtarları üzerinden yapılan kötü niyetli yayınları durdurmak.
Token modelleri nasıl değişti?
1. Classic / Legacy Token — Tarihe karışıyor
Bu token’lar süresizdi ve genellikle tüm paketlere erişim verebiliyordu. Güvenlik açısından en zayıf halka haline geldiler. Artık oluşturulamıyorlar; mevcut olanlar ise iptal ediliyor.
2. Granular Access Token — Yeni standart
Belirli paket(ler) için, sınırlı süreyle erişim tanımlayabiliyorsun.
Ömür: 7 gün (isteğe bağlı 90 güne kadar).
Yetki: Yalnızca ilgili paket ve eylemler (publish, read, vs).
Kullanım: Hem manuel publish hem de CI/CD senaryolarında.
Kısacası artık “tek anahtar = her şey” dönemi bitti.
3. Trusted Publishing — Yeni otomasyon çağı
GitHub Actions, GitLab CI ve benzeri platformlar artık kimliklerini OIDC (OpenID Connect) protokolüyle doğruluyor. Bu sayede repoda kalıcı token saklamadan publish yapılabiliyor.
Bu yöntem, “bir gün env’de unutulmuş token çalındı ve zararlı paket basıldı” riskini ortadan kaldırıyor.
2FA zorunluluğu ve kimlik doğrulama yöntemleri
Artık npm hesabına tek şifreyle girmek yetmiyor.
İki faktörlü kimlik doğrulama (2FA) zorunlu hale geldi ve aşamalar şu şekilde:
WebAuthn / Passkey öncelikli.
Fiziksel güvenlik anahtarı veya biometrik kimlik doğrulama en güvenli yöntem olarak belirlendi.TOTP uygulamaları (6 haneli kod)
Bir süre daha çalışacak ama npm uzun vadede phishing’e dayanıklı passkey modeline tam geçiş planlıyor.npm login komutu
Artık kalıcı token üretmiyor; oturum bazlı geçici yetki veriyor.
Bu, “local’den login olup sonsuz token elde etme” alışkanlığını bitiriyor.
Sonuç: Her publish, her login artık güvenlik zincirinin bir halkası.
Bu değişiklikler neden önemli?
Eskiden çalıntı bir token, tüm paketlerini etkileyebilirdi.
Yeni sistemde ise:
Token ömrü çok kısa → saldırganın zaman penceresi dar.
Yetki kapsamı küçük → sadece tek paketi vurabilir.
2FA zorunlu → hesap çalınsa bile publish yetkisi kullanılamaz.
npm bu yaklaşımla “saldırı yüzeyini” azaltıyor.
Ayrıca şirketler ve open source maintainer’lar için güven artışı sağlıyor.
Artık her yayın işlemi, dijital bir imza gibi doğrulanabiliyor.
Geliştiriciler için geçiş rehberi
Bu değişim sürecini sorunsuz atlatmak için uygulayabileceğin adımlar:
1- 2FA’yı hemen aktif et
npm profilinde güvenlik sekmesine gir.
Passkey veya donanım anahtarı ekle.
TOTP kodları yedeğini güvenli bir yerde sakla.
2- Eski token’ları temizle
npmjs.com → Access Tokens sayfasını kontrol et.
“Sınırsız erişimli token” görürsen iptal et.
Yeni oluşturacağın token’larda scope ve expiry tanımla.
3- Granular token kullan
Her paket için ayrı token oluştur.
Kullanım bittikten sonra manuel olarak kaldır.
Token’ı CI/CD’ye entegre edeceksen geçerlilik süresini minimumda tut.
4- Trusted publishing’e geç
GitHub Actions kullanıyorsan, OIDC kimlik doğrulamasını aç.
id-token: writeiznini aktif et.Böylece kalıcı
NPM_TOKENsaklamadan publish yapabilirsin.Diğer CI araçları da yakında aynı mekanizmayı destekleyecek.
5- Dokümantasyonunu güncelle
README’ye “Bu paket trusted publishing ile yayınlanmaktadır” notu ekle.
Katkı yapacak geliştiricilere 2FA gereksinimini belirt.
Bu adımlar, hem kendi projeni hem de kullanıcılarını korur.
Organizasyonlar ve takımlar için ek notlar
Kurumsal takımlar ve çok geliştiricili open source projeler için:
Tüm maintainer’lar için 2FA zorunlu hale gelecek.
Token yetkileri roller bazında tanımlanacak.
Hangi üye hangi pakete publish edebiliyor bilgisi açık görünecek.
Denetim (log) kayıtları ile her yayın geri izlenebilir olacak.
Bu düzen sayesinde, kurumsal paketlerde yetki karmaşası ve hesap paylaşımı problemi sona erecek.
Ekosistem ve gelecek vizyonu
Bu adımlar npm’in geleceğini daha kurumsal ve güvenli bir zemine taşıyor.
Bir bakıma “npm publish” artık sıradan bir komut değil; resmî bir imza işlemi.
Kullanıcılar, geliştiricilere ve markalara daha fazla güven duyabilecek.
Paket indiren herkes şunu bilecek:
Bu yayın, gerçekten sahibi tarafından doğrulandı.
npm böylece ekosistem bazında bir “güven sertifikası” modeline doğru ilerliyor.
Son düşünceler
Kısa vadede bazı geliştiriciler için ekstra adımlar gibi görünebilir ama uzun vadede açık kaynak ekosisteminin sağlamlaşması anlamına geliyor.
Artık hiçbir CI hatası, hiçbir unutulmuş token veya şifre sızıntısı toplu felakete neden olmayacak.
Yeni dönemin özeti:
Kısa ömürlü ve kısıtlı yetkili token’lar
Zorunlu ve phishing’e dayanıklı 2FA
OIDC tabanlı kimlik doğrulama
Geliştirici ve kurumlar için tam izlenebilirlik
Bu kurallar artık sadece “güvenlik önerisi” değil, npm ekosisteminin temel standartları.
Sonuç olarak:
npm publish = güvenlik olayıdır.
Ve bu bilinci benimseyen her geliştirici, ekosistemin daha güvenli bir geleceğine katkı sağlıyor.

Erhan AKKAYA
FrontEnd Architect | UI&UX Specialist