· kaynak dev.to (home feed)
Deno 2.6 minimum dependency age bayrağı ay ve yıl sürelerini sessizce yok sayıyor
Deno 2.6'nın --min-dep-age koruması, ay veya yıl içeren ISO süreleri için filtrelemeyi sessizce atlıyor ve uyarı vermeden en yeni sürümü kuruyor; dev.to üzerindeki testler bunu gösteriyor.

Deno 2.6, yeni yayınlanmış npm paketlerine karşı bir korumayla geliyor; ancak bu koruma bazı girdilerde sessizce devre dışı kalıyor. dev.to üzerinde alexgeorgiov17 tarafından yayınlanan uygulamalı testlere göre, --min-dep-age bayrağı ay, yıl veya zaman bileşeni içeren bir ISO-8601 süresi verildiğinde hiçbir şey yapmıyor: Deno gerçek en yeni sürümü kuruyor, 0 koduyla çıkıyor ve hiçbir uyarı yazdırmıyor. Politikasını "altı ay" veya "iki yıl" olarak ifade eden bir ekip hiçbir koruma elde etmiyor ve bir şeylerin ters gittiğine dair hiçbir sinyal almıyor.
Özelliğin nasıl çalışması gerekiyor
deno add ve deno install üzerinde kullanılabilen bayrak, eşikten daha genç her bağımlılık sürümünü reddediyor. Mantık şu: Kötü amaçlı bir npm sürümü genellikle birkaç saat veya gün içinde geri çekilir ya da bildirilir; dolayısıyla yalnızca bekleme süresini atlatmış paketleri kurmak, bu saldırı sınıfının çoğundan kaçınmayı sağlıyor. Dev.to yazısında alıntılanan CLI yardımına göre değer düz bir dakika sayısı, P2D gibi bir ISO-8601 süresi veya RFC3339 mutlak kesim tarihi ya da zaman damgası olabiliyor ve bayrak kararsız (unstable) olarak işaretlenmiş.
Gün tabanlı filtreleme düzgün çalışıyor
Yazar, özelliği taşıyan güncel stabil sürüm olarak tanımlanan Deno 2.9.6 üzerinde test etti; 20 yaygın paket için tek bir deno add komutunu bir kez kısıtsız, bir kez de 30 günlük minimumla çalıştırdı. On iki paket daha eski sürümlere çözüldü; diğer sekizinin en yeni sürümleri zaten 30 günden eskiydi. En çarpıcı örnek vitest oldu: 30 günlük eşik sürüm 4.1.10'u sabitledi — gerçek en yeni sürüm olan 5.0.1'in tam bir major gerisinde — ve daha yeni bir major'un varlığına dair hiçbir hata, uyarı veya ipucu verilmedi. Ek yük ihmal edilebilirdi: kısıtsız 20 paketlik toplu işlem 10,2 saniye sürerken filtreli işlem 10,6 saniye sürdü; taze bir container ve soğuk önbellek kullanıldı.
Ay ve yıl kontrolü devre dışı bırakıyor
Yardım metni yalnızca gün tabanlı örnekler gösteriyor; ancak ISO-8601 ay ve yıl bileşenlerini de tanımlıyor ve bayrak açıklaması bunları dışlamıyor. Testlerde günler ve haftalar (P30D, P4W), düz dakikalar ve mutlak tarihler doğru şekilde filtreledi. Süre bir ay veya yıl bileşeni içerdiğinde — P1M, P2Y, P100Y, hatta P0Y1M0D gibi sıfır değerli biçimler — tüm kısıtlama kaldırıldı ve Deno, bayrak hiç geçirilmemiş gibi gerçek en yeni sürümü kurdu. Zaman bileşeni eklemek, P1DT0H, aynı şekilde bozdu. Bu çalıştırmaların tamamı 0 koduyla çıktı, stderr'ye hiçbir şey yazmadı ve --log-level=debug seviyesinde bile atlanan ya da reddedilen bir aday hakkında hiçbir şey göstermedi.
Pratik sonuç: deno. dosyasına minimumDependencyAge P6M olarak yazılan bir politika hiçbir koruma sağlamıyor ve bunu fark etmenin tek yolu çözülen sürümleri kayıt defteriyle elle karşılaştırmak.
İki ek tuzak daha
- Yapılandırma adlandırması: CLI bayrağı --min-dep-age, ancak deno. anahtarı tam yazımıyla minimumDependencyAge. Bayrağı yansıtan minDepAge yazımı sessizce yok sayılıyor. Deno blog duyurusu uzun biçimi kullanıyor, yani belgelerin kendisi doğru; tuzak, bayrak ile anahtar arasında simetri varsaymak.
- Lockfile'lar: yaş kontrolü, bir sürüm seçildiğinde ya da lock güncellendiğinde, yani çözümleme anında çalışıyor; her kurulumda değil. Yazar yaklaşık üç gün eski bir zod sürümünü lockladı, node_modules'ü sildi ve 30 günlük minimumla deno install çalıştırdı; taze sürüm herhangi bir şikâyetsiz yeniden kuruldu. Politikaya sahip olmayan biri tarafından lockfile commit edildiyse, bir CI kurulum adımında bayrağı ayarlamak hiçbir şey kazandırmıyor.
Düzgün davranan kısımlar
Deno 2.6 ayrıca deno install --allow-scripts'i npm lifecycle hook'ları için deno approve-scripts ile değiştirdi. Testte simple-git-hooks kurulumu, postinstall betiğini varsayılan olarak bir uyarıyla engelledi; açık bir adlı onay betiği çalıştırdı ve karar deno. içinde bir allowScripts girdisi olarak kaydedildi — belgelerle tam olarak eşleşiyor. Bağımlılık grafiğini npm'in danışma veritabanına karşı kontrol eden diğer başlık özelliği deno audit ise yazarın kurulumunda kayıt defteri uç noktasına ulaşamadı ve bir istek hatası döndürdü.
Neden önemli
Sessizce ve "açık failures" modunda başarısız olan bir güvenlik kontrolü, hata veren bir kontrolünden daha kötüdür; çünkü sahte bir güven üretir. Minimum yaş fikrinin kendisi sağlam ve ucuz — filtreleme, saniyenin kesri kadar süren bir metadata karşılaştırması — ancak ay ve yıl süreleri desteklenene ya da yüksek sesle reddedilene kadar ekipler politikalarını gün veya hafta cinsinden (P30D, P26W) ya da mutlak kesim tarihleri olarak ifade etmeli, minimumDependencyAge anahtarını kullandıklarını doğrulamalı ve kuralın bir sürüm seçildiğinde değil, kurulduğunda bağlandığını unutmamalıdır. Şu haliyle, doğal olarak ay veya yıl cinsinden ifade edilen bir politika, her şeyi kurma izni olarak okunuyor.
- #deno
- #npm
- #supply-chain-security
- #package-management
- #javascript
İlgili yazılar
- Sahte işe alım görevi, uzaktan kod çalıştırmaya izin veren kötü niyetli npm paketini gizliyordu
- ChainDrop npm solucanı AI agent hook'ları aracılığıyla aylık 2 milyar indirilen 444 paketi ele geçirdi
- Cloudflare, tarayıcıların gözünden kaçan sekiz kötü niyetli JavaScript payload'unu yapay zekâ modelinin yakaladığını açıkladı