deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Taze kurulumları geciktirme: npm, pnpm, Yarn, Bun ve uv için 7 günlük paket kapıları

Zararlı npm sürümleri genellikle haftalarca değil, saatlerce ayakta kalıyor. Bir dev.to rehberi, npm, pnpm, Yarn, Bun ve uv'de sürüm yaşı soğuma sürelerini nasıl zorunlu kılacağınızı anlatıyor; böylece kodlama agent'leri yepyeni paket sürümlerini çekmeyi bırakıyor.

Taze kurulumları geciktirme: npm, pnpm, Yarn, Bun ve uv için 7 günlük paket kapıları

npm'deki zararlı paket sürümleri genellikle kısa ömürlü oluyor. Gabriel Anhaia'nın bir dev.to yazısına göre, zararlı chalk sürümü 12 saatten kısa, Nx'i hedefleyen bir sürüm yaklaşık dört saat, rspack için olan bir sürümse kabaca bir saat yayında kaldı. William Woodruff, bilinen on tedarik zinciri saldırısını inceleyerek sekizinin istismar penceresinin bir haftadan kısa olduğunu buldu.

İşte o pencere, otonom kodlama agent'lerinin tam da çalıştığı yer. Bir agent bir kütüphaneye ihtiyaç duyduğuna karar veriyor, saniyeler sonra kurulumu çalıştırıyor ve yayınlanmış en yeni sürümü alıyor — henüz hiçbir tarayıcının ve muhtemelen başka kimsenin incelemediği, büyük ihtimalle bir saat önce phishing'le ele geçirilmiş bir maintainer hesabından itilmiş bir sürümü. Anhaia'nın önerdiği savunma, bir sürüm yaşı kapısı ya da soğuma süresi: N günden genç her sürümü reddetmek. npm, pnpm, Yarn, Bun ve uv artık bunu zorunlu kılabilir; her biri ayarı farklı yazıyor.

Tek ayar, beş lehçe

Her yöneticideki yedi günlük kapı:

  • npm (11.10.0 ve sonrası): .npmrc içinde min-release-age=7, gün cinsinden.
  • pnpm (10.16 ve sonrası): pnpm-workspace.yaml içinde minimumReleaseAge: 10080, dakika cinsinden.
  • Yarn (4.10.0 ve sonrası): .yarnrc.yml içinde npmMinimalAgeGate: "7d", süre olarak yazılı.
  • Bun (1.3 ve sonrası): bunfig.toml içinde [install] altında minimumReleaseAge = 604800, saniye cinsinden.
  • uv (0.9.17 ve sonrası): pyproject.toml içinde exclude-newer = "7 days", bu da bir süre.

Anhaia uyarıyor: Birimi yanlış yazmak kapıyı işe yaramaz ya da saçma hale getiriyor: minimumReleaseAge: 7 pnpm'de yedi dakika, Bun'da yedi saniye anlamına gelirken, npm'de min-release-age=10080 yaklaşık 27 yıl demek.

npm anahtarı kabul ediyor ama yok sayıyor

min-release-age ancak 11 Şubat 2026'da çıkan npm 11.10.0'da geldi. Daha eski npm sürümleri .npmrc dosyasını okuyor, anahtarı tanımayamıyor ve hiçbir kapı olmadan kurulumu yapıyor; 11.2.0'dan itibaren en azından bilinmeyen yapılandırma uyarısı var. Anhaia, 11.10'dan eski her npm'de build'i başarısız kılan bir pre-install script öneriyor.

Atıf yaptığı npm dokümantasyonuna göre resolver, yapılandırılmış gün sayısından daha önce yayınlanmış sürümlerden bir bağımlılık ağacı kuruyor ve uygun hiçbir şey yoksa hata veriyor. npm audit fix bir yamanın çok yeni olması nedeniyle engellenirse, npm savunmasız sürümü koruyor, uyarıyor ve sıfır olmayan bir kodla çıkıyor — bu da bilinçli bir muafiyet eklemek için sinyal. Yalnızca public registry'de gerçekten size ait olan scope'ları muaf tutun; aksi halde herhangi biri @myorg/anything yayınlayıp kapıdan geçebilir.

pnpm, Yarn ve Bun

pnpm dakika cinsinden sayıyor ve pnpm 11'den beri ayarı pnpm-workspace.yaml dosyasından okuyor. Varsayılanı 1440 dakika — bir gün — ama katı zorunluluk yalnızca değeri kendiniz belirlediğinizde geçerli. Varsayılanla pnpm, daha eski hiçbir şey uymadığında çok yeni bir sürüme geri düşebilir; açık bir değerde ise çözümleme başarısız olur. Hariç tutma listesi isimleri, glob'ları ve [email protected] || 5.102.1 gibi kesin pin'leri kabul ediyor.

Yarn hariç tuttuklarına pre-approved packages diyor, bunları npmPreapprovedPackages üzerinden yapılandırıyorsunuz ve kapıyı dahili olarak dakika cinsinden saklıyor — Classmethod'un testlerinde "21d" geri okunduğunda 30240 çıktı. Bir sürüm aralığında Yarn, kapıdan geçen en yeni adayı kuruyor; kapı geçişli bağımlılıkları da kapsıyor ve çok yeni olan kesin bir pin "No candidates found" hatasıyla başarısız oluyor.

Bun'un minimumReleaseAgeExcludes alanı paket isimlerini ya da tek bir kesin sürümü muaf tutmak için name@version biçimini alıyor. Dokümantasyonda scope wildcard gösterilmiyor, dolayısıyla dahili paketlerin tek tek listelenmesi gerekiyor.

uv kesim tarihini lockfile'a donduruyor

uv'un exclude-newer ayarı "7 days" gibi dostane süreleri ve "P7D" gibi ISO 8601 biçimlerini kabul ediyor — ama ay veya yıl değil — ayrıca exclude-newer-package tek bir dahili paketi muaf tutabiliyor. Üç davranış JavaScript yöneticilerinden farklı. Süre, çözümleme anında bir timestamp'e dönüştürülüp uv.lock içine yazılıyor ve --upgrade gibi bir sonraki açık çözümlemeye kadar orada kalıyor; böylece lockfile her gün kaymıyor. Kesim tarihi, sürümün çıkış tarihi değil her dosyanın upload zamanına göre denetleniyor; dolayısıyla dün upload edilmiş eski bir sürüme ait bir wheel yine çok yeni sayılıyor. Ve yalnızca registry paketleri kapıdan geçiyor — Git bağımlılıkları denetlenmiyor.

Kapı, commit edilmiş bir dosyada olmalı

~/.npmrc gibi kullanıcı düzeyindeki yapılandırma tek bir makinedeki her worktree'ye ulaşıyor ama bir takım arkadaşının dizüstüne, CI'ya veya bir container'a ulaşmıyor. Anhaia bu yüzden kapıyı commit edilmiş bir dosyaya koyuyor; böylece depoya ait her checkout'ta kurulum çalıştıran her agent onu okuyor ve registry token'larını, proje dosyası git'e girdiği için kullanıcı düzeyindeki dosyada tutuyor. Agent odaklı Hermes IDE'nin geliştiricisi olarak kendi perspektifinden yazarak, görev başına worktree'lerin commit edilmiş ayarı otomatik olarak devraldığını ekliyor — bu nokta aynı zamanda ürününü de tanıttığı için buna göre tartın.

Neden önemli

Tedarik zinciri saldırıları giderek hıza dayanıyor: yayınla, kurulumları topla, kaldırılmadan önce yok ol. AI kodlama agent'leri ideal kurbanlar çünkü bağımlılıkları seçiyor ve aynı anda kuruyorlar; arada insan duraklaması yok. Yedi günlük bir soğuma süresi bu açığın çoğunu neredeyse bedavaya ortadan kaldırıyor; bedeli, meşru yamaları beklemek ve bunu yönetmek için de muafiyet mekanizmaları var. Daha geniş ders operasyonel: bir yapılandırma satırı, onu zorlayan bir şey olmadıkça politika değildir. Eski npm anahtarı sessizce yok sayıyor, pnpm yalnızca değer açık olduğunda güvenli biçimde başarısız oluyor ve her araç kapıyı farklı adlandırıp farklı ölçüyor. Bunu benimseyen herkes CI'ya bir sürüm denetimi ve taze bir sürümün yalnızca yapılandırılmış değil, gerçekten engellendiğini kanıtlayan bir test eklemeli.

  • #npm
  • #supply-chain-security
  • #package-managers
  • #coding-agents
  • #javascript

İlgili yazılar